无法在Rails 3.2中的has_one关联中批量分配受保护的属性

时间:2016-01-21 23:48:41

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

我在这里检查了很多帖子并应用了几十个答案而没有成功。所以这里......保持简单......包括使用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; ==产生错误的线”

表示

1 个答案:

答案 0 :(得分:2)

你为什么使用

<%= f.fields_for :do_instrument do |instrument_f| %>

而不是

<%= f.fields_for :instrument do |instrument_f| %>

您可以随时检查传入的参数以检测错误的来源。您可以在各自的控制器方法中编写它,并查看终端输出。

puts "*"*30
puts params
puts "*"*30

这是诊断问题的最简单方法,否则您可以使用不同的宝石进行调试。