У меня есть две модели в приложении Rails 4 с ассоциацией has_one.Rails 4 nested_attributes с отменой ассоциации has_one
class User < ActiveRecord::Base
has_one :member
accepts_nested_attributes_for :member
end
class Member < ActiveRecord::Base
belongs_to :user
end
Я пытаюсь создать пользователя с членом. Это мой контроллер.
class UsersController < ApplicationController
def new
@user = User.new
@user.build_member
end
def create
@user = User.new member_params
if @user.save
redirect_to users_path
else
render action: :new
end
end
private
def member_params
params[:user].permit(:id, :name, :email, :password, :city, member_attributes: [ :position, :avatar, :avatar_cache, :user_id ])
end
end
Это форму. Я использую SimpleForm.
= simple_form_for @user do |f|
= f.input :name
= f.input :email
= f.input :city
= f.input :password
= f.simple_fields_for :member, @user.member do |us|
= us.input :position
= us.input :avatar
= f.button :submit
Какая часть моего кода неверна?
Parameters: {"utf8"=>"✓", "authenticity_token"=>"eqxcHlLrnKB9atm3YGG6WyMT429qqRr5zpB/LM4IMAI=", "user"=>{"name"=>"Павел", "email"=>"[email protected]", "city"=>"Ульяновск", "password"=>"[FILTERED]", "member_attributes"=>{"position"=>"123", "avatar_cache"=>""}}, "commit"=>"Создать User"}
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1 (0.3ms)
BEGIN
User Exists (0.5ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = '[email protected]' LIMIT 1 (0.3ms)
ROLLBACK
Этот код работает в своих проектах на Rails 3, но есть не strong_parameters в Rails 3.
Похоже, что это откат, потому что он находит, что другой пользователь уже существует с электронной почтой, которая, вероятно, установлена как уникальная. Если это не проблема, есть ли ошибка в вашем журнале сервера, в котором говорится о запрещенном параметре? – irruputuncu
@irruputuncu да! Ты прав! У меня есть 'validates: user_id, наличие: true' в модели участника. Он работает после удаления этой строки! Спасибо! –
Рад, что это уже могло решить вашу проблему! Я просто разместил его как ответ, чтобы этот поток можно было пометить как разрешенное. – irruputuncu