2014-02-25 4 views
0

레일스 4와 데이터베이스 연결을 배우려고합니다.관련된 테이블 필드가 조건을 충족하는 경우 테이블 열 합계

내 응용 프로그램에는 판매 및 제품이라는 두 가지 모델이 있습니다. 이 성공적으로 product_group_id은 "30"입니다 반환

@s = Sale.find_by_product_id("10RB1236").product.product_group_id 

    Sale Load (1.5ms) SELECT "sales".* FROM "sales" WHERE "sales"."product_id" =  '10RB1236' LIMIT 1 
    Product Load (0.8ms) SELECT "products".* FROM "products" WHERE "products"."product_id" = $1 ORDER BY "products"."product_id" ASC LIMIT 1 [["product_id", "10RB1236"]] 
=> "30" 

:

class Sale < ActiveRecord::Base 

    belongs_to :customer 
    belongs_to :product 

end 

class Product < ActiveRecord::Base 

    self.primary_key = :product_id 

    has_many :sales 

end 

나는 성공적으로 할 수있는 has_many와 belongs_to와 레일 콘솔에서 연결을 설정했습니다. 나의 학습 협회를위한 이정표 :) 그걸로 행복해.

하지만 product_id와 연결된 product_group_id가 30 인 net_amount의 합계를 반환 할 수있게하려면이 조건을 충족하는 데이터베이스의 모든 행에 대해 총 net_amount를 얻으십시오.

나는 시도했다 :

@c = Sale.sum(:net_amount, :conditions => {:product_id.product_group_id => "30"}) 
@c = Sale.sum(:net_amount, :conditions => {:product_id.product.product_group_id => "30"}) 

그냥 좀 더 아이디어 나이 작업을 수행하는 방법에 대한 해결책을 얻을려고? 순수한 SQL에서이 작업을 수행했다면 어딘가에서 내부 결합이 일어날 것이라고 생각합니다.

모든 아이디어는 크게 감사하겠습니다. 누군가가이 붙어 대한

+0

http://stackoverflow.com/questions/12702506/how-to-use-inner-join-in-ruby-on-rails 이 질문에 큰 도움이되었다 미래. –

답변

1
Sale.includes(:product).where("products.product_group_id = ?", "30").sum(:net_amount) 
+0

안녕하세요 bjhaid, 제안 주셔서 감사합니다. product_group_id가 30으로 지정되는 곳은 어디입니까? 또한 판매 테이블에서 "10RB1236"뿐만 아니라 "30"과 같은 product_group_id를 갖는 많은 product_id가있을 수 있습니다. –

+0

괜찮아요, 어쨌든 내가 가입 할 필요가 없다는 것을 분명히 해 주셔서 고맙습니다. 내 협회의 어딘가에 채워져 있거나 협회의 교실로 돌아 가야한다고 생각합니다. –

+0

악화되면 product_id와 함께 product_group_id를 포함하도록 판매 테이블을 변경할 수 있습니다. 나는이 대답이 명백하다는 것을 확신하지만, 한 번에 백만 장소를보고있다. –

관련 문제