私はこの質問が何度も聞かれたことを知っています。私はすでに問題なく何度もアプリにネストfields_for
しているので、今回はなぜ機能しないのか混乱しています。このトピックを再度取り上げたことをお詫び申し上げます。
ユーザーモデルがあります。ユーザーは多くのアカウントを持つことができます。ユーザーが少なくとも1つのアカウントなしで存在するのを防ぐために、アカウントsemantic_fields_for
を設定するための1つの入力だけで、新しいユーザーフォームにネストされています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_attributes
、semantic_fields_for
正しく設定されています。私が得るエラーは次のとおりです。
保護された属性を一括割り当てできません:アカウント
送信されたフォームのスタックトレースには、すべての正しい変数が含まれています。アカウントrole_id
はネストされた属性によって正しく設定されています。レコードは、一括割り当てエラーのために単に拒否されていますが、私の属性はすべて適切に保護されているようです。
Rails3.2.3およびFormtastic2.2の使用。
編集済み
クラス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 %>