ユーザーとプロファイルの 2 つのモデルがあります。
ユーザー名とパスワードをユーザーに保存し、他のユーザー プロファイルの詳細をプロファイルに保存したいと考えています。
現在、
ユーザーモデルには次のものがあります。
has_one :profile
accepts_nested_attributes_for :profile
attr_accessible :email, :password,:profile_attributes
プロファイルモデルには
belongs_to :user
attr_accessible :firstname, :lastname
ユーザーコントローラーには
def new
@user = User.new
@profileattr = @user.build_profile
end
def create
@user = User.new(params[:user])
if @user.save
redirect_to root_url, :notice => "user created successfully!"
else
render "new"
end
end
ビュー new.html.erb には、ユーザーとプロファイルの両方のフィールドがあります。
ビューには:
<%= form_for @user do |f| %>
<% if @user.errors.any? %>
<div class="error_messages">
<h2>Form is invalid</h2>
<ul>
<% for message in @user.errors.full_messages %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<p>
<%= f.label :email %><br />
<%= f.text_field :email %>
</p>
<p>
<%= f.label :password %><br />
<%= f.password_field :password %>
</p>
<%= f.fields_for @profileattr do |pf|%>
<p>
<%= pf.label :firstname %><br />
<%= pf.text_field :firstname %>
</p>
<p>
<%= pf.label :lastname %><br />
<%= pf.text_field :lastname %>
</p>
<% end %>
<p class="button"><%= f.submit %></p>
<% end %>
ただし、この Web アプリケーションを実行すると、次のエラーが表示
されます: 保護された属性を一括割り当てできません: プロファイル
デバッグ時に、ユーザーが次のような属性を持っていることがわかりました:
:email:abc@gmail.com
:password:secret
:profile
---:firstname:abc
---:lastname:xyz
そのため、予想される params[:profile_attributes] の代わりに、params[:profile] を返すビュー
が大量割り当てエラーにつながります。何が問題なのですか?