Ошибка массового назначения при обновлении дочерней модели - PullRequest
0 голосов
/ 21 июня 2011

У меня проблемы с обновлением дочерней модели через вложенную форму. Я прочитал много веток о StackOverflow в надежде найти решение, но мне не повезло. добавление: contact_info_attributes к attr_accessible службы ничего не делает для решения этой проблемы.

Вот форма.

<% 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

Помощь

1 Ответ

1 голос
/ 21 июня 2011

Ваши формы не являются вложенными.

Вместо:

<%= fields_for :contact_info do |c| %>

Положите:

<%= service.fields_for :contact_info do |c| %>
...