我正在尝试找到如何计算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
答案 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)