ネストされたフォームを介して子モデルを更新する際に問題が発生しました。解決策を見つけることを期待してStackOverflowで多くのスレッドを読みましたが、運がありません。サービスのattr_accessibleに:contact_info_attributesを追加しても、この問題を解決するために何もしません。
これがフォームです。
<% form_for(@service) do |service| %>
<%= fields_for :contact_info do |c| %>
<p>
Contact Person: <%= c.text_field :contactPerson %>
</p>
<p>
Contact Number: <%= c.text_field :contactNumber %>
</p>
<% end %>
<p>
Issue: <%= service.text_field :issue, :rows => 3 %>
</p>
<p>
Urgency: <%= service.text_field :urgency %>
</p>
<%= submit_tag "Update" %>
<% end %>
これが私のcontact_infoモデルです。
class ContactInfo < ActiveRecord::Base
has_many :services
attr_accessible :contactPerson, :contactNumber
end
これが私のサービスモデルです。
class Service < ActiveRecord::Base
belongs_to :user
has_one :contact_info
accepts_nested_attributes_for :contact_info, :allow_destroy => true
attr_accessible :issue, :urgency, :contact_info_attributes, :group, :member
end
これが「更新」アクションです。
# services_controller.rb
def update
@service = Service.find(params[:id])
if @service.update_attributes(params[:service]) && @service.update_attributes(params[:contact_info])
redirect_to service_path(@service)
else
redirect_to edit
end
end
フォームを更新しようとするたびに、フォームのサービス部分は正常に処理されますが、:contact_infoはそのような一括割り当てエラーに遭遇し続けます。
Parameters: {"utf8"=>"✓", "authenticity_token"=>"ykJt08tkHSzoYgyQu11lnKms1BZ+vM2i/Q0ZOoYDxks=", "contact_info"=>{"contactPerson"=>"Jmes Jor", "contactNumber"=>"3726262"}, "service"=>{"issue"=>"My house is flooded.", "urgency"=>"1"}, "commit"=>"Update", "id"=>"46"}
Service Load (0.8ms) SELECT "services".* FROM "services" WHERE "services"."id" = 46 LIMIT 1
WARNING: Can't mass-assign protected attributes: contactPerson, contactNumber
ヘルプ?