我有三个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
,并在英尺 > homeruns 每个团队累积起来。 (Feet
是homerun
上的属性。)
我现在最接近的是@league.homeruns.sum(:feet)
(显示每个联盟的本垒打总距离),但我想在球队一级做到这一点,按联赛过滤。
有意义吗?任何帮助都将深表感谢。
答案 0 :(得分: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
然后列出特定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>