什么是正确的关联方式?从多个模型渲染数据?

时间:2015-01-24 19:24:13

标签: ruby-on-rails ruby activerecord

我正在尝试编写一些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进行所有这些查询...我觉得它已经做得太多了

如果我的问题需要更多代码来解释,我很乐意帮忙。感谢您的任何见解。

2 个答案:

答案 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