accepted_nested_attributes_for不能按预期在Rails中的用户模型工作

时间:2014-02-23 09:11:09

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 devise ruby-on-rails-3.2

尝试提交嵌套属性时出现以下错误:

Can't mass-assign protected attributes: staff

我的User模型(由Devise创建):

class User < ActiveRecord::Base
  attr_accessible :name
  has_one :staff
  accepts_nested_attributes_for :staff, reject_if: :new_record?
end

我的设计registrations/edit.html.erb观点:

<%= f.fields_for resource.staff do |s| %>
  <%= s.label :notification_email %>
  <%= s.email_field :notification_email, placeholder: 'Enter notification email' %>
<% end %>

在HTML帖子中作为参数提交的内容:

"user"=>{"name"=>"Scott",
"staff"=>{"notification_email"=>"myemail@example.com"}}

根据documentation for nested attributes,我希望员工的HTML post参数为"staff_attributes",而不仅仅是"staff"

我做错了什么吗?我是否真的需要将staff添加到attr_accessible属性列表中?这不适用于Devise吗?我必须在视图中使用resource而不是@user

2 个答案:

答案 0 :(得分:1)

在您的视图中

删除resource.,如下所示:

<%= f.fields_for :staff do |s| %>

在模型中,将:staff_attribute(或staff_attributes不确定)添加到attr_accessible

答案 1 :(得分:0)

  1. 传递符号而不是实例。

  2. 在用户模型中添加attr_accessible :staff_attributes

  3. 在用户控制器的新方法中初始化人员实例。