2015-01-07 5 views
0

У меня есть две модели в приложении 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.

+1

Похоже, что это откат, потому что он находит, что другой пользователь уже существует с электронной почтой, которая, вероятно, установлена ​​как уникальная. Если это не проблема, есть ли ошибка в вашем журнале сервера, в котором говорится о запрещенном параметре? – irruputuncu

+0

@irruputuncu да! Ты прав! У меня есть 'validates: user_id, наличие: true' в модели участника. Он работает после удаления этой строки! Спасибо! –

+0

Рад, что это уже могло решить вашу проблему! Я просто разместил его как ответ, чтобы этот поток можно было пометить как разрешенное. – irruputuncu

ответ

1

Это более вероятно, будет проблема с валидаций, чем с сильными параметрами. В вашем случае user.email кажется ограниченным, чтобы быть уникальным, но это могло быть что угодно на моделях user или member. Разумеется, запретный параметр также может быть причиной того, что проверка не удалась, даже если были отправлены правильные данные, но в этом случае вы увидите сообщение в журналах сервера (однако исключение не выбрасывается).

Смежные вопросы