我的数据库中有一个列,“发生”。用户可以选择不输入任何内容或输入 1 到 10 之间的任何数字。我正在尝试将每个用户的所有事件(跨多个记录)添加到总计中。
第 1 部分 - 将数据过滤到当前用户
@total_occurrences = Event.where(['occurrences <> ?', current_user.id])
到目前为止,一切都很好。
第 2 部分 - 计算“出现次数”列中的数字
不知道如何处理这个......
我的数据库中有一个列,“发生”。用户可以选择不输入任何内容或输入 1 到 10 之间的任何数字。我正在尝试将每个用户的所有事件(跨多个记录)添加到总计中。
第 1 部分 - 将数据过滤到当前用户
@total_occurrences = Event.where(['occurrences <> ?', current_user.id])
到目前为止,一切都很好。
第 2 部分 - 计算“出现次数”列中的数字
不知道如何处理这个......
如果您使用 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)}
至于第二部分,你可以这样做:
sum = 0
Event.where(user_id: current_user.id).pluck(:occurrences).each do |occurrence|
sum += occurrences
end
Pluck 提取特定列的所有值,然后您所要做的就是将它们加在一起。
brendanjcaffrey 的答案是我正在寻找的:
Event.where(user_id: current_user.id).where('occurrences <> 0').pluck(:occurrences).sum