2010-12-01 12 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 resultに各Productにこのmin_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仮定し、あなたのProductクラスのメソッドが考えられます。

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

findまたはRails 3に相当する部分のSQLの計算列と同じように、新しい列を使用することもできます。

+0

ありがとうございます。私は1つの解決策を見つけました。 問題は、最小価格を計算するためにグループを使用するSQL minを使用することでした。 Category.last.products.with_min_price.order( 'category_products.position')というクエリがある場合、selectでは位置がありません。だから私はこのクエリでそれを追加する必要があります。 with_min_price(:and '>' position ') – mm1

関連する問題