我所拥有的是3个对象集合和2个关联。我的对象是“所有者”,“骑师”和“马”,并且关联是OwnerID(所有者) - > OwnerID(Jockey)和JockeyID(Jockey) - > JockeyID(马)。
Owner
Name **OwnerID**
Jockey
Name **OwnerID** *JockeyID*
Horse
Name OwnerID *JockeyID*
每位车主可以拥有许多骑师,每位骑师可以拥有许多马匹。 **和*代表关键映射。
所以在我的“所有者”的页面上,我想打印所有“马”,但根据他们的“骑师”分组。我没有这样分组地打印过它们:
<table>
<tr>
<th>Name</th>
<th>JockeyID</th>
</tr>
<% @subject.FirstAssociation.SecondAssociation.each do |horse| %>
<tr>
<td>
<%= horse['Name'].first %>
</td>
<td>
<%= horse['JockeyID'].first %>
</td>
</tr>
<% end %>
这将只是打印:
Name JockeyID
Horse 1
Horsie2 2
Horsie3 3
...
我想要的是现在按骑师分组,而不是打印:
Jockey Name : Mark the Jockey
Name JockeyID
Horse 1
JockeyName : Fred the Jockey
Name JockeyID
Horsie2 2
Horsie3 3
etc.
如何实现这一目标?
答案 0 :(得分:1)
如果您已在模型中定义了关联,请执行以下操作:
/app/models/
Owner
has_many :jockeys
Jockey
belongs_to :owner
has_many :horses
Horse
belongs_to :owner
belongs_to :jockey
如果您尝试根据@owner
打印所有骑师列表。你应该这样做:
<% @owner.jockeys.each do |jockey| %>
<tr>
<td>Jockey Name </td>
<td>
<%= jockey.name %>
</td>
<% jockey.horses.each do |horse| %>
<tr>
<td>
Horse Name
</td>
<td>
<%= horse.name %>
</td>
</tr>
<% end %>
你可以根据我的假设编写代码,进行必要的更改。 感谢
答案 1 :(得分:0)
@subject.FirstAssociation.SecondAssociation
令人困惑,所以我只是将其视为一个错误并忽略它。
通常人们会这样做:
#in controller (show action, eg for url /owners/123)
@owner = Owner.find_by_id(params[:id], :include => {:jockeys => [:horses]})
#OR, depending on your rails version (the following is newer syntax)
@owner = Owner.where(:id => params[:id]).includes(jockeys: [:horses]).first
#in view
#doing one table per jockey here, it's not clear what's required
<% @owner.jockeys.each do |jockey| %>
<table>
<tr>
<th><%= jockey.name %></th>
<th><%= jockey.id %></th>
</tr>
<% jockey.horses.each do |horse| %>
<tr>
<td>
<%= horse.name %>
</td>
<td>
<%= horse.JockeyId %>
</td>
</tr>
<% end %>
</table>
<% end %>