0

我的数据库中有一个列,“发生”。用户可以选择不输入任何内容或输入 1 到 10 之间的任何数字。我正在尝试将每个用户的所有事件(跨多个记录)添加到总计中。

第 1 部分 - 将数据过滤到当前用户

@total_occurrences = Event.where(['occurrences <> ?', current_user.id])

到目前为止,一切都很好。

第 2 部分 - 计算“出现次数”列中的数字

不知道如何处理这个......

4

3 回答 3

1

如果您使用 rails 4,您可以编写:

@total_occurrences = Event.where(user_id: current_user.id).where.not(occurrences: nil)

在 rails 3 中,您可以编写 sql 查询:

@total_occurrences = Event.where(user_id: current_user.id).where("occurrences IS NOT NULL")

或使用 gem Squeel。它允许你这样写:

@total_occurrences = Event.where{(user_id == current_user.id) & (occurrences != nil)}
于 2013-07-28T16:15:01.830 回答
1

至于第二部分,你可以这样做:

sum = 0
Event.where(user_id: current_user.id).pluck(:occurrences).each do |occurrence|
  sum += occurrences
end

Pluck 提取特定列的所有值,然后您所要做的就是将它们加在一起。

于 2013-07-28T16:20:02.803 回答
-1

brendanjcaffrey 的答案是我正在寻找的:

Event.where(user_id: current_user.id).where('occurrences <> 0').pluck(:occurrences).sum

于 2013-07-28T16:22:48.050 回答