2017-02-07 3 views
2

Ich versuche, einen Benutzer von einem anderen Modell (Corporacion) zu erstellen, ich dieses Modell in der Corporacion schrieb:Erstellen Sie einen Benutzer mit einem anderen Modell

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 

Aber wenn ich einen Corporacion der Benutzer erstellen wird nicht erstellt (Im mit Schienen 4.1 und Ruby 1.9.3)

Antwort

2

Aufruf create speichert gültige Objekte. Sie müssen danach nicht mehr save anrufen. Aber wir wissen, dass es nicht gerettet wird. Der erste Verdacht ist ein Validierungsfehler.

debuggen Ihre sparen Sie create! Methode anstelle von create verwenden. Wenn das Speichern fehlschlägt, wird eine Ausnahme ausgelöst. Aber die Verwendung von create! sowie andere "Bang" -Methoden ist nicht sehr gute Praxis. Daher kann ich Ihnen nicht empfehlen, es in Ihrem Produktionscode zu verwenden.

Und noch ein Tipp für den Fall, wenn create! Werke und create nicht: Best Practice Schöpfung in Ihrem Anwendungsfall auszuführen ist so etwas wie folgt vor:

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 

Dieser Code erfolgreich Ergebnis zurück (true) wenn Ihre user erstellt wurde und Validierungsfehler aufgetreten sind, wenn nicht. Damit können Sie Ihre Fehler in dem Code, der createUser aufruft, richtig behandeln. Und es wird auch zeigen, warum Ihr Speichern jetzt nicht funktioniert.

+0

Das war mein Mystake Tipp, aber ist nicht der Fehler, sorry – Bryan

+0

erstellen! gearbeitet, vielen Dank. – Bryan

+0

Festhalten. Es ist nicht sehr gut, 'create!' Und andere "bang" -Methoden in Ihrem Produktionscode zu verwenden. Es ist jedoch nützlich für das Debugging. Also solltest du besser herausfinden, warum dein einfaches 'create' nicht funktioniert hat. Denken Sie immer noch daran, dass Ihr "Corporacion" zu der Zeit, in der Sie "User" erstellen, nicht existiert. – VAD

Verwandte Themen