2010-12-01 1 views
2

Можно ли добавить виртуальный столбец в модель (а не виртуальный атрибут!)?Виртуальные столбцы в модели

Я следующая ситуация: Product(id, name) имеет много ProductVariant(id, price, offer_price, product_id,...)

Когда я выберите все продукты, которые я хочу иметь минимальную цену продукта из всех ProductVariants в результате продукции.

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

рассчитать минимальную цену в SQL-запросе (with_min_price) и хочет добавить это min_price значения для каждого Product в моем @products result.

ответ

4

Это может быть просто метод в классе продуктов предполагается, что ваш has_many продукта ProductVarients

#Product Model 

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

Должно ли это быть `def self.min_product_price`, если это метод класса? – 2010-12-01 17:26:01

+0

whoops, да, это не метод класса, это метод объекта. Я обновил ответ. Вы просто вызываете вызов `@ products.each {| p | p.min_product_price} ` – brycemcd 2010-12-01 21:54:19

2

Вы можете сделать это с обычаем выбрать, хотя столбец будет доступен только для чтения:

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

Вы также можете использовать новый столбец, так как вы бы рассчитали столбец в SQL в любой из других частей find или эквивалентов Rails 3.

 Смежные вопросы

  • Нет связанных вопросов^_^