错误调用Controller中的模型方法

时间:2013-06-07 22:56:55

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-3.2

您好我尝试从我的控制器调用我的模型的方法,但是当尝试实例时会收到此错误:

NoMethodError (undefined method `products=' for #<Class:0x114bc4c50>):
  app/controllers/carts_controller.rb:57:in `calculate_ship'

model.rb

def self.make_pack
    products.each do |p|
      p.product.length = 16 if p.product.blank?
      p.product.weight = 0.3 if p.product.blank?
      p.product.width = 11 if p.product.blank?
      p.product.height = 6 if p.product.blank?
      @item = Correios::Frete::PacoteItem.new :peso => p.product.weight, :comprimento => p.product.length, :largura => p.product.width, :altura => p.product.height
      while p.quantity > 0
        pacote.add_item(@item)
        p.quantity -= 1
      end
    end
  end

当我打电话时这是方法:

Cart.products = buy_cart.line_items
  Cart.make_pack

错误是在第一行,我不承担,因为什么,请有人可以帮助我?

1 个答案:

答案 0 :(得分:2)

如果product中使用Cart定义attr_accessor :product,则product属于Cart实例。它不能被类Cart.product访问。所以你的代码需要说:

my_cart.product = buy_cart.line_items

您可以将其定义为类方法,如下所示:

class Cart...
  ...

  self.product=( prod )
    @product = prod
  end

  self.product
    @product
  end

  ...
end

然后Cart.product = something之类的引用应该有用。