Rails has_many:通过"子对象"的sum属性 - > SQL Toughy

Som*_*lse 4 activerecord ruby-on-rails

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

这可能听起来很愚蠢,但假设例如以棒球为主题的应用程序:

:league has_many :teams 
:team has_many :users   
:league has_many :homeruns, :through => :users
:user has_many :homeruns 
Run Code Online (Sandbox Code Playgroud)

我想做的事情,联赛上的show网页是每个列表team中相应的league,总结了多少本垒打每支球队都有,累计.(Feet是属性homerun.)

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

合理?任何帮助将深表感谢.

Zai*_*uch 10

如果你添加: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
Run Code Online (Sandbox Code Playgroud)

然后列出特定的所有团队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>
Run Code Online (Sandbox Code Playgroud)