Я немного в тупике от этого, потому что я чувствую, что уклонился от общих ошибок (например, mistyping the attr_accessible или leaving it out altogether), но я все еще получаюВложенная форма - не может назначить защищенный атрибут
Can't mass-assign protected attributes: home, work
погрешность здесь. Я предполагаю, что у меня что-то не хватает, но я не уверен, что.
Во всяком случае, в моем новом приложении у Пользователей есть один Дом и одна Работа (каждая из которых принадлежит пользователю), и я хочу, чтобы пользователи вводили их при регистрации. Так, в моей модели:
user.rb
attr_accessible :email, :first_name, :last_name, :password, :password_confirmation, :home_attributes, :work_attributes
has_one :home, :work
accepts_nested_attributes_for :work, :home
has_secure_password
home.rb
attr_accessible :address, :latitude, :longitude, :user_id
belongs_to :user
validates :address, presence: true
work.rb
attr_accessible :address, :latitude, :longitude, :user_id
belongs_to :user
validates :address, presence: true
в мой контроллер
users_controller.rb
def new
@user = User.new
respond_to do |format|
format.html # new.html.erb
format.json { redirect_to @user }
end
end
и в моей форме:
просмотров/пользователей/_form.html.haml
= form_for @user do |f|
- if @user.errors.any?
.error_explanation
%h2
= pluralize(@user.errors.count, "error")
prohibited this post from being saved:
%ul
- @user.errors.full_messages.each do |msg|
%li= msg
= f.label :first_name
= f.text_field :first_name
= f.label :last_name
= f.text_field :last_name
= f.label :email
= f.text_field :email
= f.label :password
= f.password_field :password
= f.label :password_confirmation, "Re-Enter Password"
= f.password_field :password_confirmation
= f.fields_for :home do |builder|
= builder.label :address, "Home address"
= builder.text_field :address
%br
= f.fields_for :work do |builder|
= builder.label :address, "Work address"
= builder.text_field :address
.btn-group
= f.submit 'Sign Up!', class: "btn"
Это интересно мне, что ошибка говорит, что не может назначить 'дома', когда на самом деле параметр должен быть назван 'home_attributes'. Вы пытались выполнить настройку '@ user.build_home' и' @ user.build_work' в своем новом действии? – awbergs
Я попытался добавить эти две строки - «@home = Home.new» и «@work = Work.new» - в мой контроллер, а затем «f.fields_for @home do | builder |». Это то, что вы имели ввиду? Это протестует аналогично. – Sasha
Отрицательный. Вы хотите специально построить его для вашего объекта @user ('@ user.build_home',' @ user.build_work') – awbergs