0

在rails 3教程之后,我定义了一个范围来限制订单列和一个辅助方法来总结结果范围

class LineItem < ActiveRecord::Base
attr_accessible :cart_id, :product_id, :cart, :product, :quantity

belongs_to :order
belongs_to :product
belongs_to :cart

scope :order, -> {where("order != nil")}
end

帮手

 module StoreHelper

  def total_product_sold (product)    
 product.line_items.total_product.sum("quantity")
end

问题是当我从我的视图中调用 total_product_sold 时,它会汇总订单列中的所有数据,而不是仅订单号为 !=nil 的数据。

我还尝试定义一个类方法而不是范围

 def self.total_product
 where(order !=nil)
 end

但这给了我相同的确切结果。我究竟做错了什么?我如何让它只添加订单列不为零的项目?

4

1 回答 1

0

您无法使用!= nil. 您需要使用 SQL 语法IS NOT NULL

scope :order, -> { where("line_items.order_id IS NOT NULL") }

或者:

def self.total_product
  where("line_items.order_id IS NOT NULL")
end

或者,您可以加入:order有效地为您进行过滤的协会。但是,这样做会带来性能损失:

def total_product_sold (product)     
  product.line_items.joins(:order).sum("quantity")
end
于 2013-07-30T15:45:11.300 回答