2011-12-17 2 views
0

Итак, я подключаюсь к старой базе данных. У меня есть две таблицы, Sites и States.Почему мои ассоциации не работают в ActiveRecord в обоих направлениях?

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

Вы должны использовать пару has_many, belongs_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_to и has_many в двух классах моделей. has_one - частный случай has_many. belongs_to говорит, что внешний ключ находится в модели, объявляющей ассоциацию, и has_one, has_many говорят, что внешний ключ находится в другой модели.

Смежные вопросы