Как заставить nested_attributes работать в Rails3? - PullRequest
1 голос
/ 24 декабря 2010

Вот моя модель пользователя:

class User < ActiveRecord::Base
  has_one :teacher, :dependent => :destroy
  accepts_nested_attributes_for :teacher, :allow_destroy => true
  attr_accessible :email, :password, :password_confirmation, :remember_me, :teacher_attributes
end

Вот моя модель учителя:

class Teacher < ActiveRecord::Base
  belongs_to :user
  attr_accessible :user_id, :first_name, :last_name
  validates_presence_of :user_id, :first_name, :last_name
end

Вот моя форма:

<%= form_for(@user, :url => registration_path(:user)) do |user| %>


        <%= user.text_field :email %>
        <%= user.text_field :password %>
        <%= user.text_field :password_confirmation %>


    <%= user.fields_for resource.build_teacher do |t| %>
            <%= t.text_field :first_name %>
            <%= t.text_field :last_name %>
            <%= t.text_field :phone %>
    <% end %>

      <%= user.submit 'Confirm' %>
<% end %>

За исключением того, что эта вещь победила 't "принять вложенные атрибуты" Мой журнал разработки говорит:

WARNING: Can't mass-assign protected attributes: teacher

Я не знаю, связано ли это, но форма не генерирует поля внутри массива teacher_attributes или чего-либо еще - это внутри учителя.Я предполагаю, что именно в этом моя проблема, но я не знаю, как заставить это поместить поля внутри.Пожалуйста, помогите.

Спасибо!

1 Ответ

3 голосов
/ 24 декабря 2010

Попробуйте вот что:

Вверху просмотра:

<% @user.build_teacher if @user.teacher.nil? %>

Для полей:

<%= user.fields_for :teacher do |t| %>

Также лично мне нравится называть блокпараметры в формах (часть |user| и |t|) как |form| (потому что, когда у вас длинный день, и вы видите user внизу, а не form, это может вас запутать!)

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