6

我有三个,one-to-many关系,一个has_many :through关联和一个我想总结的属性的对象。

这可能听起来很傻,但假设一个以棒球为主题的应用程序:

:league has_many :teams 
:team has_many :users   
:league has_many :homeruns, :through => :users
:user has_many :homeruns 

我想要做的是,在联赛show页面上列出team各自的,并累计每支球队有league多少英尺本垒打。(Feet是 上的一个属性homerun。)

我现在能得到的最接近的是@league.homeruns.sum(:feet)(显示每个联赛的本垒打总距离),但我想在球队层面上做到这一点,按联赛过滤。

有道理?任何帮助将不胜感激。

4

1 回答 1

13

如果添加:team has_many :homeruns, through: :users,则可以使用team.homeruns.sum(:feet)来获取每个团队的目标,对吗?最好将其移动到team模型中的方法中:

# team.rb
has_many: homeruns, through: :users

def total_homerun_distance
  self.homeruns.sum(:feet)
end

然后列出特定的所有团队league,只需遍历视图中team属于该团队的每个团队league,并用您想要的任何 HTML 包装。例如,要将其显示为表格:

# views/leagues/show.html.erb
<table>
<% @league.teams.each do |team| %>
  <tr>
    <td><%= team.name %></td>
    <td><%= team.total_homerun_distance %></td>
  </tr>
<% end %>
</table>
于 2013-04-17T06:24:18.550 回答