计算循环中的总和

时间:2018-04-17 10:43:48

标签: ruby-on-rails ruby devise

我目前正在开发一个rails项目,我是这种语言的新手。 使用Devise,我希望得到sign_in_count的总和并显示它。

我的sign_in_count是一个整数,默认值为0,每次用户登录时都会递增。

这是我到目前为止所尝试的内容:

count_sign_in = 0

@users.each do |user|
  count_sign_in << user.sign_in_count 
end 

但是你可以想象,它不起作用...... 如果可能的话,我希望每周和每月都有这笔款项。

有任何帮助吗? 非常感谢。

3 个答案:

答案 0 :(得分:3)

我使用单个SQL查询

User.sum(:sign_in_count)

答案 1 :(得分:0)

更正您的代码:

count_sign_in = 0

@users.each do |user|
  count_sign_in += user.sign_in_count # similar to count_sign_in = count_sign_in + user.sign_in_count
end

注意: count_sign_in不是数组,要在数组中推送元素,我们在ruby中使用<<

答案 2 :(得分:0)

如上所述,最简单的方法是使用sql聚合。

User.sum(:sign_in_count)

您还可以对对象集合执行求和。在这种情况下,#each迭代不是optimale,因为它需要额外的locale变量。 Enumerable模块提供了许多有用的方法,如sum

@users.sum { |user| user.sign_in_count }

也可以使用符号来缩短它来处理

@users.sum(&:sign_in_count)