如此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
答案 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
以获得某个玩家的联赛。