Ruby将两个字段加在一起排序

时间:2014-08-21 14:14:12

标签: ruby-on-rails ruby sorting

我使用以下内容从数据库中提取行:

@items = @product.inventory_items.where("products.hidden = ?", false)

这包含三个字段 - :regular_price:sale_price:shipping_cost。如何按总价格对商品进行分类,以便最低的组合价格和运费首先是?

2 个答案:

答案 0 :(得分:1)

如果您想以总销售价格订购,请尝试:

@items = @product.inventory_items.select('*, (sale_price+shipping_cost) as total_sale_price').order('total_sale_price')

同样的总正常价格。或者根据需要混合搭配。您可以根据需要在末尾添加where子句。

为了更进一步,如评论中所述,如果regular_price为空,我们可以使用sale_price

对于MySQL:

@items = @product.inventory_items.select('*, (IFNULL(sale_price, regular_price) + shipping_cost) as total_price').order('total_price')

对于Postgresql:

@items = @product.inventory_items.select('*, (COALESCE(sale_price, regular_price) + shipping_cost) as total_price').order('total_price')

答案 1 :(得分:1)

@product.inventory_items.
  select(:regular_price, :sale_price, :shipping_cost, 
         "(regular_price + sale_price) as sum_of_prices").
  order(sum_of_prices: :asc, shipping_cost: :asc)

注意:where("products.hidden = ?", false)对我没有意义,所以我删除了它。