2016-08-15 8 views
0

ユーザーIDを考慮して特定の列の値を乗算したい。Rails ActiveRecordを使用したafcolumnの値を掛ける

私はユーザ1(ID 1)とユーザ2(ID 2)、及びnamemensal_costを持つテーブルanimalsでテーブルusersを有していると仮定する。

OK]をクリックして、その後、私はActiveRecordを使用することができます方法を知りたいユーザー2(ID 2)

ため、ユーザ1(ID 1)用の2匹の動物や1匹の動物を追加増加3カ月後にmensal_cost収入を算出し、同じベース値、それは私がこのような何かしようとしている私は3

によって実際の値を乗算しなければならないことを意味:私は、ユーザーが存在することができますどのように多くを知らないので、私が書く必要があります

Animal.where(user_id: ?).sum('3*mensal_cost') 

を各ユーザのためにリストされるコールidは3ヶ月後の金額です。

答えて

0

[OK]を、あなたはほとんど自分でそれを持っていた - ちょうどマイナーな詳細は、このようなことができます:

user_ids = [id1, id2] 
full_sum = 3 * Animal.where(:user_id => user_ids).sum(:mensal_cost) 

注:あなたは、加算後3を掛けることができます忘れないでください、それは同じだろう3例えば

を乗じ、それぞれを合計するなど(3 * 2)+(3 * 3)+(3 * 4)== 3 *(2 + 3 + 4)

か、を反復処理することができますユーザーは次のように個々の合計を取得します。

mensal_sums = {} 
user_ids = [id1, id2] 
user_ids.each do |user_id| 
    mensal_sums[user_id] = 3 * Animal.where(:user_id => user_id).sum(:mensal_cost) 
end 

puts mensal_sums 
=> {id1 => 63, id2 => 27} 

あなたにも、ユーザー名を欲しいEDIT と1:

mensal_sums = {} 
users = User.find([id1, id2]) 
users.each do |user| 
    mensal_sums[user.id] = {:user_name => user.name, 
          :sum => (3 * user.animals.sum(:mensal_cost)) } 
end 

puts mensal_sums 
=> {id1 => {:user_name => "Bob Jones", :sum => 63}, 
    id2 => {:user_name => "cJane Brown", :sum =>27} 
    } 
+0

タリン、すべてのfisrt、あなたの答えをありがとう。しかし、この方法では、すべてのユーザーからのmensal_costの合計に3を乗じたものが得られます。本当に必要なのはid1 mensal_cost * 3 = 300、id2 mensal_cost * 3 = 700 ... – Bruno

+0

ah coolです。ええ、私はあなたが意味するものを参照してください。あなたはそれを構築するためにユーザーの配列を反復することができます...おそらく1つのクエリでそれを行う "グループで"の方法ですが、反復方法は十分にうまくいくでしょう。私は例を追加します。 –

+0

グレート:)、あなたの例のprobabは、今私は各ユーザーIDのユーザー名(ユーザーテーブルにあります)を取得する必要があるので、私は多くの助けになります。 私はprobabがUser.joins(:animals)のようなことをする必要があると思う....ここで私はハッシュを構造化する方法を知らないが、私はすでに読んだがそれを得なかった:( – Bruno

0

私は解決策を考え出した:

Animal.group('user_id').sum('3*mensal_cost') 

グループがキーだった:D

関連する問題