2017-02-07 16 views
2

Я пытаюсь создать пользователь из другой модели (Корпорасьон), я написал это в модели Корпорасьона:Создание пользователя с другой моделью

after_create :createUser 

def createUser 
    @user = Usuario.create(nombre: "aa", corp_id: 3, email: "[email protected]", password: 123456, password_confirmation: 123456, rol: 3) 
    @user.save 
end 

Но когда я создаю CORPORACION пользователь не будет создан (Im использование рельсов 4.1 и ruby ​​1.9.3)

ответ

2

Вызов create сохраняет действительные объекты. Поэтому после этого вам не нужно звонить save. Но мы знаем, что он не спасен. Первое подозрение - ошибка проверки.

Чтобы отладить вашу экономию, вы можете использовать метод create! вместо create. Это приведет к исключению, если ваше сохранение не удастся. Но использование create!, а также других методов «взрыва» - не очень хорошая практика. Поэтому я не могу предложить вам использовать его в вашем производственном коде.

И еще один отзыв в случае, если create! работы и create не: Лучшая практика для выполнения создания в вашем случае использования что-то вроде следующего:

def createUser 
    user = Usuario.new(nombre: "aa", corp: self, email: "[email protected]", password: 123456, password_confirmation: 123456, rol: 3) 
    user.save ? true : user.errors 
end 

Этот код будет возвращать результат преуспевающим (true) если ваш user был создан, и ошибки проверки произошли, если нет. Таким образом, вы сможете правильно обрабатывать свои ошибки в коде, который вызывает createUser. А также покажет, почему ваши сбережения не работают сейчас.

+0

Это был мой мистический наконечник, но это не ошибка, извините – Bryan

+0

create! работал, спасибо большое. – Bryan

+0

Держитесь. Не очень хорошая практика использовать 'create!' И другие методы «bang» в вашем производственном коде. Однако это может быть полезно для отладки. Поэтому вам лучше узнать, почему ваш простой 'create' не работал. По-прежнему считайте, что сделка - это ваше 'Corporacion', которого нет в то время, когда вы создаете« Пользователь ». – VAD