Rails部分用于嵌套资源

时间:2013-04-15 00:57:35

标签: ruby-on-rails ruby

我有一个名为Contest的模型。 Contest可以包含许多Athlete个实例。这在Contest模型中定义为:

def athletes
  team.athletes
end

在这种情况下,Contest也定义belongs_to :team

在比赛视图中,我想显示一个循环通过所有运动员的部分。我试过这样的事情:

<%= render :partial => 'athletes', :collection => @contest.athletes %>

它将partial列为缺失部分,因为它正在检查顶级视图/应用程序目录。

有没有更好的方法来定义我的竞赛之间的关系&lt; - &gt;运动员并在比赛视图中呈现部分内容?

1 个答案:

答案 0 :(得分:0)

这里有一些未经测试的代码:

# Models
class Team < ActiveRecord::Base
  has_many :athletes

class Contest < ActiveRecord::Base
  belongs_to :team
  has_many :athletes, :through => team
end

# View
<%= render(@contest.athletes) %>

# or 
<%= render :partial => "contest/athlete", :collection => @contest.athletes %>

您可以使用导轨Contest#athletes,而不是自己定义has_many :through

使用partial时,您甚至可以定义存储partial的路径。 例如,如果您的比赛在特殊情况下呈现给运动员,您可能希望将该部分存储在此位置:app/views/contests/_athlete.html.erb

你可以在上面的代码中渲染它。 (注意!代码中没有'_',但在文件名中)