2016-09-16 15 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 

は値の両方のために作られた呼び出しの両方の値のために、最後の1の代わりの合計を返します:

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は常に1つのレコードのみを返します。

view_context.time_plusはIDS

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

おかげで、この1つの作品の配列を返す場合は、この

Model.where(column_name: [array_of_ids]) 

のような複数のIDのWHERE条件を使用することができます – AlexRor

0

あなたは、これはあなたが注入方法を使用することができます

0

動作するはずです。この

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

を試すことができます。

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) 
関連する問題