1

我创建了一个循环来计算记录的总评分。为此,我首先遍历所有子记录(评分),从每一行中提取评分,将其添加到总数中,然后输出总数。

<% total = 0 %>
<% for ratings in @post.ratings %>
    <% total = (total + ratings.rating) %>
<% end %>
<%= total %>

我的问题是,简单地说,这是铁路方式吗?

它达到了预期的结果,尽管需要 5 行来做到这一点。我担心我会将其他语言的旧习惯带入我的 Rails 项目,我希望有人能澄清是否有更简单的方法。

4

3 回答 3

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) }
于 2013-02-17T07:05:55.127 回答
1

您通常应该将逻辑排除在您的视图之外。我会将该代码放在帮助程序或控制器中,然后调用一个方法来计算总数

于 2013-02-17T06:30:41.837 回答
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

于 2013-02-17T06:44:47.103 回答