嵌套fields_for的批量分配错误

时间:2012-05-11 16:44:43

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

我知道这个问题已被问过很多次了。我已经多次在我的应用程序中嵌套fields_for没有问题,所以我很困惑为什么这次不能正常工作。我为再次提出这个话题而道歉。

我有一个用户模型。用户可以拥有多个帐户。为了防止用户现在没有至少一个帐户,我在新用户表单中嵌套了semantic_fields_for,只有一个用于设置帐户role_id的输入。

类用户

    attr_accessible :accounts_attributes
    has_many :accounts, :dependent => :destroy
    accepts_nested_attributes_for :accounts

班级帐户

    attr_accessible :role_id, :user_id, :status
    belongs_to :role
    belongs_to :user

用户/新

    <%= f.semantic_fields_for :accounts do |account| %>
    <%= account.input :role, :as => :select, :collection => @roles, :label => "Account" %>
    <% end %>

因此,回顾一下:我在用户和帐户之间设置了关联,用户模型包含accepts_nested_attributes_for,用户模型包括attr_accessible :accounts_attributessemantic_fields_for已正确设置。我得到的错误是:

  

无法批量分配受保护的属性:帐户

提交表单中的堆栈跟踪包含所有正确的变量。帐户role_id由嵌套属性正确设置。该记录只是因质量分配错误而被拒绝,但看起来我的属性似乎都得到了适当的保护。

使用Rails 3.2.3和Formtastic 2.2。

EDITED

类UsersController

def new

  @user = User.new         
  @user.accounts.build

用户/新

    <%= semantic_form_for :user, :url => users_path do |f| -%>

    <%= f.inputs do %>
        <%= f.input :name %>
        <%= f.input :username %>
    <%= f.input :email %>   
        <%= f.input :password, :as => :password %>
        <%= f.input :password_confirmation, :label => "Confirm Password", :as => :password %>
    <%= f.input :school_id, :as => :hidden, :input_html => {:value => @school.id} %>        

        <%= f.semantic_fields_for :accounts do |account| %>
          <%= account.input :role_id, :as => :select, :collection => @roles %>
        <% end %>

    <%- end -%> <%# END f.inputs do %>
      <%= submit_tag 'Create User', :class => "button" %>
    <%- end -%> <%# END form %>

2 个答案:

答案 0 :(得分:0)

GOT IT !!我删除了:url =&gt;并更改:用户在semantic_form_for块中的@user ...我想我的方式是导致params [:account]引发质量分配

答案 1 :(得分:-1)

尝试将此添加到您的用户类

attr_accessible :accounts_attributes