0

我知道很多人已经遇到了同样的问题,但我没有找到适合我的特殊情况的解决方案。我有以下型号:

class Invoicing::CommercialDocumentLine < ActiveRecord::Base
  attr_accessible :commercial_document_line_details_attributes

  has_many :details, :class_name => "Invoicing::CommercialDocumentLineDetail", :foreign_key => :commercial_document_line_id
  accepts_nested_attributes_for :details
end

class Invoicing::CommercialDocumentLineDetail < ActiveRecord::Base
  attr_accessible :description, :commercial_document_line_id

  belongs_to :commercial_document_line
end

我有一个表格来更新一个CommercialDocumentLine允许用户添加一些细节的表格:

= simple_form_for line do |f|

  ## some code here which works great

  = f.simple_fields_for :commercial_document_line_details do |fd|
    = fd.input :description

问题是我一直收到警告:

WARNING: Can't mass-assign protected attributes: commercial_document_line_details

这是我的控制台日志:

"invoicing_commercial_document_line"=>{"article_id"=>"3", "unit_price"=>"200.0", "format_quantity"=>"2.0", "discount_rate"=>"0.0", "commercial_document_line_details"=>{"description"=>"awesome"}}, "commercial_document_id"=>"1", "id"=>"11"}

事实是我对这里发生的事情有点困惑:如果我用我的形式替换

= f.simple_fields_for :commercial_document_line_details

经过

= f.simple_fields_for :details

那么表格将不会显示。如果我更换

attr_accessible :commercial_document_line_details_attributes

经过

attr_accessible :details_attributes

然后我有同样的错误。

我当然在这里遗漏了一些东西,但我无法弄清楚。
任何帮助,将不胜感激。

4

1 回答 1

3

如果您使用= f.simple_fields_for :details,它实际上是在获取 的详细信息列表f.object。对于新对象,这通常是空白的,因此您什么都看不到。这是正确的使用方法fields_for。您只需要在控制器中使用@line.details.build或在视图中使用f.object.details.build

于 2013-02-04T11:17:29.480 回答