我创建了一个循环来计算记录的总评分。为此,我首先循环遍历所有子记录(评级),从每行中提取评级,将其添加到总计中,然后输出总计。
<% total = 0 %>
<% for ratings in @post.ratings %>
<% total = (total + ratings.rating) %>
<% end %>
<%= total %>
我的问题是,这是铁路吗?
虽然需要5行才能达到预期的效果。我担心我将其他语言的旧习惯带入我的rails项目中,我希望有人可以澄清是否有更简单的方法。
答案 0 :(得分:3)
以下内容,最好是在控制器中,将简洁地完成:
@rating = @post.ratings.sum { &:rating }
如果这看起来很神秘,你可能更喜欢
@rating = @post.ratings.inject(0) { |sum, p| sum + p.rating }
但请注意,如果任何评级为空,则会失败,因此您可能需要:
@rating = @post.ratings.inject(0) { |sum, p| sum + (p.rating || 0) }
答案 1 :(得分:1)
您通常应该将逻辑排除在观点之外。我会将该代码放在帮助器或控制器中,并调用一个方法来计算总数
答案 2 :(得分:0)
将以下内容放入您的控制器中,然后您只需在视图中使用@rating
:
total = 0
@rating = @post.ratings.each { |r| total += r.rating }
或者您可以将其移动到Post模型中并执行以下操作:
def self.total_rating
total = 0
ratings.each { |r| total += r.rating }
total
end
然后只需致电@post.total_rating