Rails - 一个模型belongs_to其他模型单引用

时间:2014-12-05 13:34:07

标签: ruby-on-rails activerecord

简单的关联问题。 我有一个包含以下字段的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"在彼此的模型?那似乎不对,对吧?看起来很简单但我的脑袋却没有解决它。

1 个答案:

答案 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