我觉得这是一个简单的错误,我无法找出,但我没有找到任何在线帮助解释我做错了什么。我有三个表创建在我的Ruby on Rails应用程序:
Facility
facility_name - string
address - string
city_id - integer
state_id - integer
and foreign keys: cities, states
City
city_name - integer
state_id - integer
State
state_short - string
state_long - string
我把模型定义为:
class Facility < ApplicationRecord
has_one :city
has_one :state
end
class City < ApplicationRecord
belongs_to :state
belongs_to :facility
end
class State < ApplicationRecord
has_many :cities
belongs_to :facility
end
我想我可以通过Rails控制台上的以下代码调出设施内的城市和州:
x = Facility.first
x.city_name
x.state_long
但是这两个代码都给予了一个错误。我是否搞错了,通过在facilities表中使用city_id
和state_id
以及上面的关系,我应该能够从相应的表中获得city_name
和state_long
?
2条答案
按热度按时间mrzz3bfm1#
这意味着
cities
和states
表具有facility_id
列但是在模式
facilties
中,city_id
和state_id
这意味着你需要这样改变你的联想
另一个选项是更改模式(如果保持关联)
换句话说,您需要在
belongs_to
和has_one
之间进行选择区别在于放置外键的位置(它位于声明
belongs_to
关联的类的表中),但是您还应该给予数据的实际含义,has_one
关系表示某个东西的一个是您的-也就是说,某个东西指向您在任何情况下,如果设施示例没有
city_name
和state_long
方法,则会发生错误,因为添加关联不会定义关联模型的方法你可以这样称呼它
但是可以添加这样的方法
或使用
delegate
方法之后你可以这样称呼它
hivapdat2#
可以从
facility
模型中的city
关系得到city_name
,如下所示:与
state_long
相同