【发布时间】:2016-08-25 18:45:27
【问题描述】:
假设我是一个具有以下数据库结构的电子商务网站:
- Orders has_many OrderItems
- OrderItem belongs_to Product
- order_items 表有一个列,数量。
- 产品表有一个 列,价格。
我想在我的 Order 模型中创建一个能够按总价过滤订单的范围。这是订单的总和(order_item 数量 * order_item 的产品价格)。
预期用途:
#Get orders that have a total cost greater than 10
Order.filter_cost('gt', 10)
这是我到目前为止形成的,但它似乎并不完全有效。我在想我不应该分组,但如果我不使用分组就会出错。在以下范围内,我得到了响应,但返回的集合不准确。
scope :filter_cost, (lambda do |*args|
if args[0] && %w(gt lt et).include?(args[0]) && args[1]
operator_map = { 'gt' => '>', 'lt' => '<', 'et' => '=' }
joins(order_items: :product).group('orders.id').group('order_items.id').group('products.id').having("SUM(products.price * order_items.quantity) #{operator_map[args[0]]} ?", args[1].to_f)
end
end)
我可以就我的查询有什么问题获得一些指导吗?
【问题讨论】:
标签: ruby-on-rails postgresql activerecord