2016-08-15 5 views
0

사용자 ID를 고려하여 특정 열의 값을 곱하고 싶습니다. 레일 ActiveRecord를 사용하여 afcolumn의 값을 곱합니다.

I는 사용자 1 (번호 1), 사용자 2 (번호 2)와 함께 테이블 users 있다고 가정하고 namemensal_cost있는 테이블 animals.

가 좋아, 나는 내가 mensal_cost 수입 후 3개월이 증가 계산하는 방법 나는 ActiveRecord를 사용 할 수 있습니다 알고 싶은 사용자 2 (ID 2)

에 대한 사용자 1 (ID 1) (1) 동물에 대한 두 동물을 추가

I 사용자가있을 수 있습니다 얼마나 많은 알 수 없기 때문에
Animal.where(user_id: ?).sum('3*mensal_cost') 

, 내가 작성해야합니다 : 같은 기본 값은, 내가 3

나는 이런 식으로 뭔가를하려고 해요하여 실제 값을 곱해야한다는 것을 의미 각 사용자별로 나열되는 호출 이드는 3 개월 후 금액.

답변

0

좋아, 당신은 거의 자신에 그것을했다 - 단지 사소한 세부 사항은 다음과 같이 할 수있다 :

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)

하거나 반복 할 수 사용자는 다음과 같이 개별 금액을받습니다.

,193,861,376,

편집 당신이뿐만 아니라 사용자 이름을 원하는 하나를

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

은 그룹의 핵심이었다 : 난 그냥 솔루션 파악

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, 당신의 대답에 감사드립니다. 하지만이 방법은 모든 사용자에게 3을 곱한 mensal_cost를 합산합니다. 실제로 필요한 것은 다음과 같습니다. id1 mensal_cost * 3 = 300, id2 mensal_cost * 3 = 700 ... – Bruno

+0

아 멋지다. 네, 무슨 뜻인지 알 겠어. 사용자 배열을 반복하여 빌드 할 수 있습니다 ... 하나의 쿼리에서 "그룹화"하는 방식 일 수 있지만 반복 방식으로는 충분합니다. 나는 예제를 추가 할 것이다. –

+0

대단한 :) 당신의 예제 probab은 많은 도움이 될 것입니다. 왜냐하면 이제는 각 사용자 ID에 대해 (사용자 테이블에있는) 사용자 이름을 가져와야하기 때문입니다. 내가 probamb이 User.joins (: animals)와 같은 것을 할 필요가 있다고 생각합니다 .... 여기에 해시 구조를 어떻게해야할지 모르겠지만 이미 읽었지만 얻지는 못했습니다. ( – Bruno

관련 문제