Rails has_many:通过“子对象”的sum属性 – > SQL Toughy

我有三个, 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页面上列出各自league中的每支球队,并累计每支球队有多少英尺本垒打 。 ( Feethomerun一个属性。)

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

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

如果你添加:team has_many :homeruns, through: :users ,你可以使用team.homeruns.sum(:feet)来获得每个团队的team.homeruns.sum(:feet) ,对吧? 将其转换为team模型中的方法可能最好:

 # team.rb has_many: homeruns, through: :users def total_homerun_distance self.homeruns.sum(:feet) end 

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

 # views/leagues/show.html.erb  <% @league.teams.each do |team| %>  <% end %> 
<%= team.name %> <%= team.total_homerun_distance %>