Форма вложенной модели: один подкласс не сохраняет свои изменения - PullRequest
0 голосов
/ 29 сентября 2011

Я работаю с вложенной формой модели, которая, похоже, работает из браузера.Однако, когда я отправляю форму, только один подкласс обновляется должным образом.

Вот модели:

Пользователь:

class User < ActiveRecord::Base
  has_many :ducks
  has_many :places
  accepts_nested_attributes_for :ducks, :places
  ...
end

Утка:

class Duck < ActiveRecord::Base
  belongs_to :user
    attr_accessible :name, :selected
  ...
end

Место:

class Place < ActiveRecord::Base
  belongs_to :user
    attr_accessible :name, :address
end

И форма:

<%= form_for(@user) do |user_form| %>
  <div class="field">
    <%= user_form.label :first_name %><br />
    <%= user_form.text_field :first_name %>
  </div>
  .
  .
  .
  <% user_form.fields_for :ducks do |duck_form| %>
    <%= duck_form.label duck_form.object.name %>
    <% unless duck_form.object.new_record? %>
      <%= duck_form.check_box 'selected?' %>
      <%= duck_form.label 'selected?', 'Enabled' %>
      <br />
    <% end %>
  <% end %>

  <% user_form.fields_for :places do |place_form| %>
    <%= place_form.label place_form.object.name %>
        <%= place_form.text_field :address %>
        <br />
  <% end %>

  <div class="actions">
    <%= user_form.submit "Update" %>
  </div>
<% end %>

Когда я отправляю форму, пользовательские данные (родительский класс) обновляются, и утки выбираются правильно/ Отменено (дочерний класс 1), но места (дочерний класс 2) сохраняют свое прежнее значение.

Почему поля Места не обновляются?


Редактировать: Обновлен вопрос для отражения миграцииот alias до place, благодаря комментарию rdvdijk.К сожалению, это не решило проблему.


Редактировать 2: Вот соответствующий бит из моего файла журнала.

Started POST "/users/1" for 127.0.0.1 at 2011-09-29 14:57:27 -0700
  Processing by UsersController#update as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"CILQ3U47rQtR9kJZ6ToAfJ7fgwqCRnrMALDZxELmFQg=", "user"=>{"first_name"=>"Foo", "last_name"=>"Man", "email"=>"foo@man.co", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "ducks_attributes"=>{"0"=>{"selected"=>"1", "id"=>"1"}, "1"=>{"selected"=>"1", "id"=>"2"}}, "places_attributes"=>{"0"=>{"address"=>"werwerwerwe", "id"=>"1"}, "1"=>{"address"=>"oiwneroinwer", "id"=>"2"}}}, "commit"=>"Update", "id"=>"1"}
  User Load (0.4ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
  CACHE (0.0ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
  CACHE (0.0ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
WARNING: Can't mass-assign protected attributes: places_attributes

Очевидно, что последняя строка - это проблема.Но даже расширение attr_accessible для включения всех полей Place (:name, :address, :id, :user_id, :created_at, :updated_at) не решает проблему.

Ответы [ 2 ]

1 голос
/ 29 сентября 2011

alias - зарезервированное ключевое слово в Ruby. Переименуйте вашу модель и попробуйте снова.

0 голосов
/ 30 сентября 2011

Оказывается, мой places не был указан как attr-accessible, и, к сожалению, я не включил эти строки в свой оригинальный вопрос:

attr_accessor :password
attr_accessible :first_name, :last_name, :email, :password, :password_confirmation,
                :ducks_attributes

Добавление: place_attributes устранило проблему:

attr_accessor :password
attr_accessible :first_name, :last_name, :email, :password, :password_confirmation,
                :ducks_attributes, :places_attributes

Надеюсь, это поможет кому-то избежать той же проблемы;мои извинения за то, что пропустили этот бит в моем первоначальном вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...