基于标准的Rails方法求和

时间:2014-04-19 22:49:20

标签: ruby-on-rails

Rails 3 Ruby 1.9

我的应用程序有一个购物车和以下模型line_items,订单和产品。 Products模型具有2个价格属性msrp和discount_price,line_items模型具有product_price属性

我正在尝试编写一个辅助方法,该方法接受product_id,遍历所有已完成的订单,并选择并汇总product_price = msrp的行项目。

我的产品型号

 class Product < ActiveRecord::Base

 has_many :line_items
 has_many :orders, through: :line_items

 end

我的订单型号

 class Order < ActiveRecord::Base

 has_many :line_items, dependent: :destroy

 end

我的Line_Items模型

 class LineItem < ActiveRecord::Base  

 belongs_to :order
 belongs_to :product
 belongs_to :cart

 def self.total_sold_msrp(product)
 where("line_items.order_id IS NOT NULL AND line_items.product_id = product.id AND line_items.product_price = product.msrp")
 end


 end  

助手模块

 module StoreHelper

 def full_price_qty_sold (product)
 full_price_qty_sold = product.line_items.total_sold_msrp(product).sum("quantity")
 end

 end

当我执行程序时,我收到此错误      “SQLException:没有这样的列:product.id product.msrp”

看起来app正在查找名为product.id和product.msrp的列,而不是在查询SQL表时使用product.id和product.msrp的实际值。

1 个答案:

答案 0 :(得分:1)

  

看起来app正在查找名为product.id和product.msrp的列,而不是在查询SQL表时使用product.id和product.msrp的实际值。

完全。将值传递给查询的正确方法是

 where("line_items.order_id IS NOT NULL AND line_items.product_id = ? AND line_items.product_price = ?", product.id, product.msrp)