导轨找到混乱

请帮我把包括权利。

Poem has_many :awards has_one :overall_ranking Award belongs_to :poem # before # has_one :overall_ranking, :foreign_key => :poem_id ## SOLUTION # after has_one :overall_ranking, :foreign_key => :poem_id, :primary_key => :poem_id OverallRanking belongs_to :poem update: Award.all(:include => [:overall_ranking]) # works with SOLUTION

请注意,我不能依靠Poem#id为用户可能会删除的诗句,但如果它是一个胜利者,我做一个副本中的Award ,所以我必须在仅靠Award#poem_id谢谢!

--------------解决方案-------------

您的问题是:

has_one :overall_ranking, :foreign_key => :poem_id

也就是说奖有一个OverallRanking和对奖HAS_ONE关系ID在列poem_id,即你的逻辑是错误的。

它会更有意义,如果你只想用:

@award.poem.overall_rating

或者在发现:

Award.all(:include => [:poem => {:overall_ranking}])

你可能想给一些更多的信息,但我希望这会有所帮助:

你可能想尝试joins

例如:

Award.all(:joins => :overall_ranking, :conditions => ['some_attribute_from_overall_ranking=?', true])

因此,这将找到的奖项和include的overall_ranking。

有一些困惑我。

Award
belongs_to :poem
has_one :overall_ranking, :foreign_key => :poem_id

在这里,您使用的是相同的ID这两个关系。 这意味着,您尝试检索与诗ID的总排名。 如果我转换到SQL你这样说:

overall_ranking.id = poem_id

我认为这是不对的。

如果你喜欢有相同的overall_rankingawardpoem ,你可以这样写:

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

你总是应该有belongs_to的为您存储的参考ID的模式。 2.但是,这并不解决您的问题,你的逻辑。 有了这个,你将仍然有之间的关联Award#poem_id = OverallRanking#id 。 你应该有Award#poem_id = OverallRanking#poem_id

我建议加上overall_ranking_idAward ,事情变得更清洁。

分类:Ruby on Rails的 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.295 (s). 10 q(s)