Rails 4如何计算每种方法的总和

时间:2016-09-16 05:21:03

标签: ruby-on-rails ruby-on-rails-4 sum

我正在尝试找到如何计算rails中每种方法的总和的解决方案。 我觉得尝试了数百种不同的方法,但还是无法安静地弄清楚它。

例如:
帮助者为产品返回2个ID :(使用警报只是为了使其可见)

view_context.time_plus.each

返回1,2

但是当我将它与call相结合并选择多个选项时,它只返回最后一个而不是两个值的总和

view_context.time_plus.each do |i|
  flash[:alert] =  [Service.find_by_price_id(i).time].sum
end

我在日志中看到调用两个值:

 Service Load (0.2ms)  SELECT  `services`.* FROM `services` WHERE `services`.`price_id` = 0 LIMIT 1
 Service Load (0.2ms)  SELECT  `services`.* FROM `services` WHERE `services`.`price_id` = 1 LIMIT 1

3 个答案:

答案 0 :(得分:1)

find_by_column总是只返回一条记录。

您可以在多个ID的where where条件中使用

Model.where(column_name: [array_of_ids])

如果view_context.time_plus返回一个id数组

Service.where(price_id: view_context.time_plus]).sum(:time)

答案 1 :(得分:0)

你可以试试这个

 flash[:alert] = view_context.time_plus.map{|i| Service.find_by_price_id(i).time}.sum

这应该有效

答案 2 :(得分:0)

您可以使用注入方法:

sum = view_context.time_plus.inject(0) { |sum,i| sum+=Service.find_by_price_id(i).time }

但是如果你在rails上使用ruby,更好的方法是使用active_record和sql:

sum2 = Service.where(price_id: [1,2]).sum(:time)