我在这里检查了很多帖子并应用了几十个答案而没有成功。所以这里......保持简单......包括使用simple_form。
在我的用户模型中,我有:
has_one :instrument
accepts_nested_attributes_for :instrument
attr_accessible ... :instrument_attributes
在我的乐器模型中,我有:
belongs_to :user
attr_accessible :user_id, :do_inst1, :do_inst2, :do_inst3, :do_inst4
在我的UsersController中,我有:
def new
@user = User.new
@user.build_instrument
end
def create_user
@user = User.new(params[:user]) # <== THE LINE PRODUCING THE ERROR
respond_to do |format|
if @user.save
format.html {redirect_to users_path, notice: "User created successfully."}
else
format.html { render action: "new" }
end
end
end
在我的新用户_form.html.erb中,我有:
<%= simple_nested_form_for :user, url: create_user_users_path do |f| %>
<%= f.input :first_name %>
<%= f.input :last_name %>
<%= f.fields_for :instrument do |instrument_f| %>
<%= instrument_f.check_box :do_inst1 %>
<%= instrument_f.check_box :do_inst2 %>
<%= instrument_f.check_box :do_inst3 %>
<%= instrument_f.check_box :do_inst4 %>
<% end %>
<%= f.button :submit, "Register User" %>
<% end %>
错误消息: 无法批量分配受保护的属性:仪器 app / controllers / users_controller.rb:51:在'new'中 线51在上面用“#&lt; ==产生错误的线”
表示答案 0 :(得分:2)
你为什么使用
<%= f.fields_for :do_instrument do |instrument_f| %>
而不是
<%= f.fields_for :instrument do |instrument_f| %>
您可以随时检查传入的参数以检测错误的来源。您可以在各自的控制器方法中编写它,并查看终端输出。
puts "*"*30
puts params
puts "*"*30
这是诊断问题的最简单方法,否则您可以使用不同的宝石进行调试。