Есть некоторая путаница для меня.
Award
belongs_to :poem
has_one :overall_ranking, :foreign_key => :poem_id
Здесь вы используете один и тот же идентификатор для обоих отношений. Это означает, что вы пытаетесь получить общий рейтинг с помощью идентификатора стихотворения.
Если я перевожу на sql, вы говорите что-то вроде:
overall_ranking.id = poem_id
Я думаю, что это неправильно.
Если вы хотите иметь одинаковые overall_ranking
для award
и poem
, вы можете написать что-то вроде этого:
Award.rb
belongs_to :poem
has_one :overall_ranking, :through=>:poem
Вы можете включить как
Award.all(:include => [:overall_ranking])
or nested
Award.all(:include => [{:poem=>:overall_ranking}])
Обновление
1.Ваше соединение установлено неправильно.
Пожалуйста, смотрите: http://blog.hasmanythrough.com/2007/1/15/basic-rails-association-cardinality
Award
belongs_to :poem
belongs_to :overall_ranking, :foreign_key => :poem_id
OverallRanking
belongs_to :poem
has_one :award
Вы всегда должны иметь принадлежность_ к модели, в которой вы храните ссылочный идентификатор.
2. Но это не решает твою проблему в твоей логике.
С этим у вас все еще будет связь между Award#poem_id = OverallRanking#id
. Вы должны иметь Award#poem_id = OverallRanking#poem_id
.
Я предлагаю добавить overall_ranking_id
к Award
, и все станет намного чище.