未初始化的常量CustomerBill :: CustomerBillLineItem

时间:2013-02-07 05:28:47

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

我在customer_billcustomer_bill_line_item之间创建了一个关联,如下所示:

class CustomerBill < ActiveRecord::Base
  attr_accessible :customer_bill_line_items_attributes
  has_many :customer_bill_line_items, :dependent =>:destroy

  accepts_nested_attributes_for :customer_bill_line_items, :allow_destroy => true
end

class CustomerBillLineItem < ActiveRecord::Base
  attr_accessible :customer_bill_id 
  belongs_to :customer_bill, :foreign_key => "customer_bill_id"
end

当我在创建模式下输入表单时,出现以下错误:

uninitialized constant CustomerBill::CustomerBillLineItem

Extracted source (around line #66):

63:                             <%end%>
64:                            
65:                            
66:             <%= f.fields_for :customer_bill_line_items do |builder| %>
67:             <%= render 'customer_bill_line_item_fields', :f => builder %>
68:             <%end%>

评论中给出了完整的堆栈跟踪。

是否必须在customer_bills_controller @customer_bill.customer_bill_line_items ??

中建立关联

需要指导。提前谢谢。

3 个答案:

答案 0 :(得分:4)

我很快就把一个示例应用程序放在一起证明你做的是对的,你可以在这里查看:https://github.com/Bram--/customer_bill哪个工作正常。 只需确保在您启动它之前就有一个客户账单&amp; CustomerBillLineItems:

c = CustomerBill.create name: 'Name'
CustomerBillLineItem.create name: 'Line Item A', price: '1.00', customer_bill_id: c.id
CustomerBillLineItem.create name: 'Line Item B', price: '2.00', customer_bill_id: c.id

您使用的是什么版本,我们在上面的代码中没有看到任何其他内容?

希望这个例子有所帮助,否则请给我留言。

答案 1 :(得分:3)

你问:

  

是否必须在customer_bills_controller中进行关联,如@customer_bill.customer_bill_line_items ??

根据Novae的工作模型它不(来自customer_bills_controller.rb,Novae's mock):

class CustomerBillsController < ApplicationController
  def show
    @customer_bill = CustomerBill.last
  end

  def update
    @customer_bill = CustomerBill.find params[:id]
    @customer_bill.update_attributes!(params[:customer_bill])

  redirect_to @customer_bill, flash: { notice: 'Updated' }
  end
end

要自动指出差异,在他的customer_bill_line_item.rb模型中,Novae在CustomerBillLineItem中包含更多attr_accessible个属性(来自app / models /):

class CustomerBillLineItem < ActiveRecord::Base
  attr_accessible :customer_bill_id, :name, :price
  belongs_to :customer_bill, :foreign_key => "customer_bill_id"
end

我无法想象这些会如何导致您的错误,但它们是我能够找到的。

答案 2 :(得分:2)

错误告诉你问题是什么。没有可以找到的CustomerBill :: CustomerBillLineItem类。

1:我假设你没有在customer_bills #new action中构建customer_bill_line_item实例,否则你会看到同样的错误。

请在新操作中检查您是否正在@customer_bill上构建customer_bill_line_item实例,并确认

3.times{@customer_bill.customer_bill_line_items.build}

如果再次遇到相同的错误,但是在控制器构建的行上,它会确认错误是什么,它无法通过CustomerBill找到类CustomerBillLineItem

我怀疑类CustomerBillLineItem的文件名中有拼写错误。确保您的类位于名为customer_bill_line_item.rb的文件中,并且位于您的模型文件夹中,而不是嵌套在任何其他文件夹中。可能范围也是一个问题。

底线是CustomerBillLineItem未正确命名或放置,这就是为什么你得到的错误告诉你它无法找到所说的类。