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

しかし、これは私にまったく同じ結果をもたらします。私は何を間違っていますか?注文列が nil でないアイテムのみを追加するにはどうすればよいですか?

4

1 に答える 1

0

を使用して NULL でないレコードを見つけることはできません!= 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 に答える