У меня есть две модели: пользователь и профиль.
Я хочу сохранить имя пользователя и пароль в файле user и другие данные профиля пользователя в профиле.
Теперь
Модель пользователя имеет:
has_one :profile
accepts_nested_attributes_for :profile
attr_accessible :email, :password
Модель профиля имеет
belongs_to :user
attr_accessible :bio, :birthday, :color
Пользовательский контроллер имеет
def new
@user = User.new
@profile = @user.build_profile
end
def create
@user = User.new(params[:user])
@profile = @user.create_profile(params[:profile])
if @user.save
redirect_to root_url, :notice => "user created successfully!"
else
render "new"
end
end
В представлении new.html.erb есть поля как для пользователя, так и для профиля.
Однако, когда я запускаю это веб-приложение, появляется ошибка:
Невозможно массово назначить защищенные атрибуты : profile
при отладке застрял на @user = User.new(params[:user]) в действии создания
Итак, что не так? Я также пытался поместить :profile_attributes в attr_accessible, но это не помогает!
пожалуйста, помогите мне найти решение.
@profile = @user.create_profile(params[:profile])
строку. Вам это не нужно. - person Vasiliy Ermolovich   schedule 13.08.2012:profile_attributes
, а не:profile
. Массовое назначение не выполняется, потому что у вас нет атрибутаprofile
и он недоступен. Если вы вызываете fields_for в представлении, обязательно передайте ему модель для профиля. Возможно,@profile
или@user.profile
, а не просто строка или символ с этим именем. - person Joeyjoejoejr   schedule 13.08.2012profile
, они должны быть в ключеprofile_attribures
, который должен быть в вашем вызове attr_accessible. Когда вы пытаетесь сохранить, rails ищет несуществующий атрибут или метод профиля,profile_attributes
добавляетсяaccepts_nested_attributes_for
. Также убедитесь, что ваш вызов fields_for вложен в вызов form_for для пользовательской модели. - person Joeyjoejoejr   schedule 13.08.2012