模型中的虚拟列

时间:2010-12-01 16:29:18

标签: ruby-on-rails activerecord ruby-on-rails-3 arel

是否可以向模型添加虚拟列(不是虚拟属性!)?

我有以下情况: 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

2 个答案:

答案 0 :(得分:4)

这可能只是您的Product类中的一个方法,假设您的Product has_many ProductVarients

#Product Model

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

答案 1 :(得分:2)

您可以使用自定义选择执行此操作,但该列将是只读的:

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

您也可以像在SQL中的任何其他部分或Rails 3等效项中的计算列一样使用新列。