我正在尝试编写一些rails代码,但我无法围绕我需要的关联。
我到目前为止:
型号:
team.rb
has_many :rosters
roster.rb
belongs_to :team
has_many :riders
rider.rb
belongs_to :roster
控制器
队_
controller.rb
def show
@team = Team.find([:params])
@rosters = @team.roster
end
@rosters
返回以下内容(在rails控制台中):
<ActiveRecord::Associations::CollectionProxy [#<Roster id: 1, team_id: 1, created_at: "...", updated_at: "...", rider_id: 1>, #<Roster id: 2, team_id: 1, created_at: "...", updated_at: "...", rider_id: 2>]>
我的最终目标是检索rider_id
字段,然后使用这些字段查找riders
表中的关联行。这是我在努力的地方。我不知道如何以允许我访问所需数据的方式关联我的模型。
此外,我已经阅读了 N + 1次查询,我觉得我已经走了那条路。我也担心我正在对teams_controller#show
进行所有这些查询...我觉得它已经做得太多了。
如果我的问题需要更多代码来解释,我很乐意帮忙。感谢您的任何见解。
答案 0 :(得分:2)
使用你的关系找到相关的骑手:
def show
@team = Team.find(params[:id])
@roster = @team.roster
@riders = @roster.riders
end
就你的控制器已经做得太多而言,它只取决于你想要完成的事情。我认为这个控制器仍然被认为是瘦的。
答案 1 :(得分:1)
感谢@AytanLibowitz,我了解到我需要使用has_many through:
关联。
http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association