2011-03-26 9 views
0

안녕 내가 미리 SQL 코드를 포함하지 않고 할 수있는 방법이 있는지 궁금 두 값의 조합에 의해 순서?루비 레일 3 가지 모델

모델 1. 제품 : has_many 가격

모델 2. 소매 : has_many 가격 : has_one 프로파일

모델 3. 가격 - 가격 : 정수 : belongs_to : 소매 : belongs_to : 제품

모델 4. 프로필 - Shippingcost : 정수 : belongs_to : retailers

정렬 할 수 있기를 원한다. (price : : shippingCost), 나는 왼쪽 조인과 함께 "SQL (bla + bla2) AS totalPrice를 만들고 정렬하는 방법을 알고있다. totalPrice에 의해, 그러나 이것을하는 더 쉬운 방법이 있습니까?

+0

meta_where gem을 확인하십시오. Ernies objective는 루비/레일 프로그래밍과 함께 sql 코드 withing의 필요성을 줄이거 나 제거하는 것입니다 ... http://metautonomo.us/projects/metawhere/를 보시고 SQL없이 처리 할 수 ​​있는지 보도록 도와 드리겠습니다. -암호. 가 아닌 왼쪽을 필요로 여전히 경우 당신은 아마 순수한 SQL-조각을 beeing는 XXXX와 ".join ('xxxx는')"테이블의 I가 관리 – Ingo

답변

0

그래서, 이런 식으로. 하지만 너무 깊게 중첩되어 있습니다.

Product.includes(:prices => {:retailer => :profile}).select("products.*, (prices.price + profiles.shippingcost) AS sum).order(:sum) 
+0

안녕 fl00r, 에 합류 올바른을 정의하는 데에 끝날 것 가입 이 작업을 수행. @price = Price.joins (: 대리점 : 대리점 => 프로필) 로그 SAIS. 가 prices' '를 선택한다. * prices' INNER retailers'.'id'가'ON 'retailers' 가입 FROM'= '가'INNER profiles'.'retailer_id' = 'ON'retailers' profiles' 가입 prices'.'retailer_id' .'id' 하지만 AS 및 주문 BY가 누락되었습니다. 아래의 마지막 코드는 어떻게 표시되어야합니까? SELECT (price prices.price +'profiles'.shippingCost) AS totalPrice FROM'prices' INNER JOIN '소매 업체'소매 업체''''''가격''소매 업체 ID''내부 프로필'''프로필''소매 업체'='소매 업체''주문'총 주문 – Philip

+0

솔루션 : @ price = Price.select ('prices'. *, ('prices'.price +'profiles'.shippingCost) AS totalPrice') 조인 (: 소매업 자 : 소매업 자 => : 프로필) .order (: totalPrice). 모두 내가 지금 가지고있는 문제는 XML과 JSON을 사용할 때 아무 예외도 없다는 것입니다 ... – Philip