如何对嵌套表单项执行计算?

时间:2012-02-29 15:11:50

标签: ruby-on-rails ruby forms

我对Rails相当新,我有这两个模型......

class Invoice < ActiveRecord::Base
  has_many :items      
  accepts_nested_attributes_for :items
  ...
end

class Item < ActiveRecord::Base
  belongs_to :invoice

  def self.total
    price * quantity
  end
  ...
end

...以及用于创建新发票记录及其相关项目的嵌套(!)表单。

但是,我发现很难对这些项目进行计算。例如,我想在每个项目旁边使用上面的total方法为此项目添加total

不幸的是,它不起作用。在我的表格中,我把它放在每个项目旁边:

<%= @invoice.items.amount %>

源自我的控制器:

def new      
  @invoice = Invoice.new
  3.times {@invoice.items.build}
end

它不断抛出错误undefined local variable or method price

我在这里缺少什么?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

你在Item上创建了一个类方法,当我认为你想要的是一个实例方法时。

class Item < ActiveRecord::Base
  belongs_to :invoice

  def total
    price * quantity
  end
  ...
end

你可以调用单个项目@item.total,或者,如果你做了所有项目的总数,那么你需要做这样的事情:

class Item < ActiveRecord::Base
  belongs_to :invoice

  def self.total
    all.collect { |item| item.price * item.quantity }
  end
  ...
end

@invoice.items.total

希望有所帮助。