这是我嵌套表单的相关部分:
<div class="field">
<%= f.fields_for "@partcode" do |p|%>
<%= p.label "partcode"%><br />
<%= p.text_field :partcode %>
<% end %>
</div>
我的模特已经有了这个:
attr_accessible :partcode,
:description
但是当我在表单中输入内容时,我收到此错误:
Can't mass-assign protected attributes: @partcode
这是我的零件代码模型:
class Partcode < ActiveRecord::Base
attr_accessible :partcode,
:description
validates :partcode,
:description,
:presence => true
belongs_to "goods_ins"
accepts_nested_attributes_for "goods_ins"
end
以下是我在商品中的所有代码:
class GoodsIn < ActiveRecord::Base
attr_accessible :c4lpono,
:courier,
:deliverydate,
:deliverynoteno,
:description,
:destination,
:notes,
:partcode,
:quantity,
:signedby,
:suppliername
validates :deliverydate,
:deliverynoteno,
:destination,
:quantity,
:signedby,
:suppliername,
:presence => true
has_many :suppliers
has_many :partcodes
accepts_nested_attributes_for :partcodes
end
此处还有我的零件代码控制器的new
部分:
def new
@partcode = Partcode.new
respond_to do |format|
format.html # new.html.erb
format.json { render :json => @partcode }
end
end
答案 0 :(得分:7)
你不应该:attr_accessible的粒子属性(在商品模型中),如下所示:
attr_accessible :partcode_attributes
假设您的模型关联是这样配置的。希望它有所帮助
答案 1 :(得分:0)
我想看看你的模特。但attr_accessible不是一个实例。我认为应该说这个
<%= f.fields_for "partcode" do |p|%>`
比你的控制器:
@partcode = Partcode.new(params["partcode"])
答案 2 :(得分:0)
查看您的回答中的评论我相信您可以使用build
方法为has_one
续签:
@partcode = GoodsIn.build_partcode
所以你的表格可以是这样的:
<%= f.fields_for @partcode do |p|%>
答案 3 :(得分:0)
您的模型必须有accepts_nested_attributes_for :partcode
,否则它将不接受它的属性。
Partcode
类也必须将其属性列为白色。
<强>更新强>
@partcode
必须包含新的Partcode
。确保设置@partcode = @goods_in.partcodes.build
或简单@partcode = Partcode.new
。
表单上的字段应该像<%= f.fields_for @partcode do |p| %>
一样,没有引号。