为什么在我的Rails应用程序中使用新发票实例化了嵌套项?

时间:2013-10-07 09:18:32

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord

在我的Rails应用程序中,我invoices可以有许多items

class Invoice < ActiveRecord::Base

  attr_accessible :number, :items_attributes # some omitted for brevity

  has_many :items

  accepts_nested_attributes_for :items, :reject_if => :all_blank

  def build_item(user)
    items.build(
      :price    => default_item_price(user), 
      :tax_rate => user.tax_rate
    )
  end

  private

    def real_hourly_rate
      project.real_hourly_rate if project.present?
    end

    def default_item_price(user)
      real_hourly_rate || user.hourly_rate
    end

end

class InvoicesController < ApplicationController

  def new
    @invoice = current_user.invoices.build(:number => current_user.next_invoice_number)
    #@invoice.build_item(current_user)
  end 

end

位于我views/invoices/new.html.erb的表单下方,我在此行中查看了使用新items实例化了多少invoice

<p>No. of items: <%= @invoice.items.length %></p>

我的问题是我得到 1 ,我希望看到 0 (请注意,我在上面的new控制器操作中注释了第二行)

有人可以向我解释为什么会这样吗?

这给我带来了各种各样的麻烦。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我总是有一个item太多的原因是我在build_item(user)中也使用了InvoicesHelper方法。我删除了该功能,现在我得到了我期望的项目数量。