Ruby on Rails - 可能" group by"?

时间:2014-08-14 11:19:39

标签: ruby-on-rails ruby ruby-on-rails-3 if-statement ruby-on-rails-3.1

我所拥有的是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.

如何实现这一目标?

2 个答案:

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