简单的关联问题。 我有一个包含以下字段的Location模型: - 名称 - 地址 - Lat - 长
这个模型应该有很多可定位的"。
确定。我也有以下型号:
Lodging
has_one location (location id)
Transportation
has_one start_location, class_name: location
has_one end_location, class_name: location
所以,在这种情况下,我应该有一个" belongs_to"在我的位置模型?或者我不需要任何东西,只需要放置" belongs_to"在彼此的模型?那似乎不对,对吧?看起来很简单但我的脑袋却没有解决它。
答案 0 :(得分:0)
要创建正确的交叉引用,您需要在类中具有::belongs_to
或::has_and_belongs_to_many
关联才能启动直接引用。第一个在类中创建class_id
字段(和属性读取器),第二个额外的交叉引用连接表名为“class_klasses
”。如果您没有eithers,则可以通过绑定类来正确设置引用,因为::has_one
和::has_many
只使用后引用,而不是直接引用。所以你需要以下内容:
class Locationable < ...
belongs_to :location
end
class Lodging < ...
belongs_to :location
end
class Transportation < ...
belongs_to start_location, class_name: :Location
belongs_to end_location, class_name: :Location
end
或者为了保持数据库更加干净,你可以使用through
密钥(例如)Lodging
类,但只有在你已经有一个关联的时候才能使用它:
class Locationable < ...
belongs_to :location
end
class Lodging < ...
belongs_to :locationable
has_one :location, through: :locationable
end