2017-02-07 10 views
2

を持つユーザーを作成します。私は、ユーザーが作成されていないCorporacionを作成するときに私はCorporacionモデルでこれを書いた 、私は別のモデル(Corporacion)からユーザーを作成しようとしています別のモデル

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 

しかし、 (私はレール4.1とルビー1.9.3を使用しています)

答えて

2

createを呼び出すと有効なオブジェクトが保存されます。その後、saveに電話する必要はありません。しかし、私たちはそれが救われていないことを知っている最初の疑惑は検証エラーです。

保存をデバッグするにはcreateの代わりにcreate!メソッドを使用します。保存が失敗した場合、例外が発生します。しかし、create!と他の "bang"メソッドの使用はあまり良いことではありません。だから私はあなたの生産コードでそれを使用するように提案することはできません。

とケース内の1つのより多くの先端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

作成!働いて、ありがとう。 – Bryan

+0

保留中です。プロダクションコードで 'create!'や他の "bang"メソッドを使うのはあまり良いことではありません。しかし、デバッグには便利かもしれません。だからあなたのシンプルな 'create'がなぜうまくいかないのかを知ることをお勧めします。それでも、あなたが 'User'を作成したときに、あなたの' Corporacion'は存在しないとの取引は考えています。 – VAD

関連する問題