2010-12-01 7 views
2

가상 특성을 추가하지 않고 모델에 가상 열을 추가 할 수 있습니까? 내가 상황 다음 한모델의 가상 열

: 나는 제품 결과의 모든 ProductVariants에서 최소한의 제품 가격을 원하는 모든 제품을 선택하면 Product(id, name) 많은 ProductVariant(id, price, offer_price, product_id,...)

있습니다.

@products = Product.with_min_price.order('min_price ASC') 

나는 SQL 쿼리 ( with_min_price)에서 최저 가격을 계산하고 내 @products resultProductmin_price 값을 추가합니다.

답변

4

열이 읽기 전용 것이지만 이것은 단지, 당신은 사용자 정의를 선택하여이 작업을 수행 할 수 있습니다

#Product Model 

def min_product_price 
    product_variants.map(&:price).min 
end 
+0

클래스 메소드 인 경우 'def self.min_product_price'가되어야합니까? –

+0

아, 그래, 그건 클래스 메서드가 아니야, 그것은 객체에 대한 방법이다. 나는 대답을 업데이트했다. 당신은'@ products.each {| p | p.min_product_price}' – brycemcd

+0

감사합니다. 내 모델에 클래스 메서드를 추가했습니다. 이 작품을 찾으십시오 – mm1

2

당신의 제품 has_many의 ProductVarients 가정 제품 클래스의 방법이 될 수 있습니다 :

>> order = Order.find(:first, :select => "(id+111) as order_number") 
=> #<Order order_number: "119" 
>> order.order_number 
=> "119" 

find 또는 Rails 3에 상응하는 다른 부분에서 SQL의 계산 된 열처럼 새 열을 사용할 수도 있습니다.

+0

고마워요. 나는 하나의 해결책을 찾았다. 문제는 최소 가격을 계산할 때 SQL min을 그룹과 함께 사용한다는 것이 었습니다. Category.last.products.with_min_price.order ('category_products.position')라는 쿼리가있는 경우 select에서 위치가 누락되었습니다. 그래서이 쿼리에 추가해야합니다. with_min_price (: 및 '>'위치 ') – mm1

관련 문제