为什么Rails没有belongs_to through方法?

时间:2014-01-09 03:33:17

标签: ruby-on-rails activerecord

如此post中所述,使用委托方法可以最好地实现belongs_to :x, through: :y关系。

为什么Rails不通过关系支持belongs_to,是否有特殊原因(技术原因,设计选择)?

class Division
  belongs_to :league
  has_many :teams
end

class Team
  belongs_to :division
  has_many :players
end

class Player
  belongs_to :team
  belongs_to :division, through: :team # WON'T WORK
end

2 个答案:

答案 0 :(得分:5)

它会像这样工作而不是通过。

belongs_to :division, class_name: Team

答案 1 :(得分:1)

我无法说明原因,但ActiveRecord方法中存在一致的自上而下模式。您正在寻找的功能已由has_many :through提供 - 这只是将语句放在祖先而不是后代对象中的问题:

  

has_many:through关联对于设置也很有用   通过嵌套的has_many关联“快捷方式”。例如,如果文档有许多部分,并且部分有许多段落,您有时可能希望获得文档中所有段落的简单集合。 [source: Rails Guides]

在您的情况下,这将如下所示:

class Division
  belongs_to :league
  has_many :teams
  has_many :players, through: :teams
end

class Team
  belongs_to :division
  has_many :players
end

class Player
  belongs_to :team
end

然后,您可以致电league.players以获得指定联盟中的一系列玩家或player.league以获得某个玩家的联赛。