为什么我的协会在ActiveRecord中没有两种方式?

时间:2011-12-17 06:59:21

标签: activerecord ruby-on-rails-3.1 associations

所以我连接到遗留数据库。我有两个表,SitesStates

Site有一个State,而State可以属于多个Sites

# Sites.rb
has_one :state, :primary_key => "StateKey", :foreign_key => "StateKey"

# States.rb
belongs_to :sites, :class_name => "Sites", :primary_key => "SiteKey", :foreign_key => "SiteKey"

如您所见,我必须手动设置外键和主键。

这样可行:

Sites.first.state  # one record returned (the state)

这不是:

States.first.sites  # nil returned.  Doesn't even appear to hit AR

我做错了什么?

感谢。

1 个答案:

答案 0 :(得分:1)

您应该使用has_manybelongs_to

# Sites.rb
belongs_to :state, :primary_key => "StateKey", :foreign_key => "StateKey"

# States.rb
has_many :sites, :class_name => "Sites", :primary_key => "StateKey", :foreign_key => "StateKey"

看看this guide

当您拥有一对多关联时,标准做法是在两个模型类中使用belongs_tohas_manyhas_onehas_many的一个特例。 belongs_to表示外键在模型中声明了关联,has_onehas_many表示外键在另一个模型中。