2016-09-16 21 views
0

我想找到解決方案如何計算每個方法在軌道中的總和。 我覺得好像嘗試了數百種不同的方法,但還是無法安靜地找出它。Rails 4如何計算每種方法的總和

例如:
助手回報2個IDS產品:(使用警報只是爲了使其可見)

view_context.time_plus.each 

回報1,2

但是,當我與電話結合起來,並選擇多選項它只是返回最後一個的總和,而不是兩個值

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 

回答

1

find_by_column總是隻返回一條記錄。

您可以使用其中條件多個ID這樣

Model.where(column_name: [array_of_ids]) 

如果view_context.time_plus返回一組ID

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

感謝,這一個作品 – AlexRor

0

你可以試試這個

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

這應該工作

0

您可以使用注射方法:

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

但如果您使用Ruby on Rails的,更好的辦法是使用active_record和sql:

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