2016-04-19 8 views
0

Ich habe ein ModellDont Sollwert ist falsch in Callback-before_create in Schienen 4

module Interspire 
    class InterspireLead < ActiveRecord::Base 
    before_create :update_contactable 

    def update_contactable 
     self.contactable = false #contactable datatype is boolean 
    end 
    end 
end 

Aber wenn ich ein Objekt erstellen.

a = Interspire::InterspireLead.create(:email => "[email protected]") 
a.valid? 
    #=> true 
a.errors.full_messages 
    #=>[] 
a.save 
    #=> ROLLBACK 

Wie zu beheben diese erorrs?

Antwort

0

Ihr Rückruf muss privat sein. (Edit: Das ist falsch Es ist keine Voraussetzung.!)

Ein Beispiel aus der Dokumentation:

class Subscription < ActiveRecord::Base 
    before_create :record_signup 

    private 
    def record_signup 
     self.signed_up_on = Date.today 
    end 
end 
+0

Sie nicht privat sein müssen! Es ist keine Voraussetzung. – Uzbekjon

+1

Vielen Dank, dass Sie darauf hingewiesen haben - immer froh, meine falschen Annahmen zu korrigieren! Also ist es nur eine gute Übung ?? –

+0

Yeap. Es fügt eine Barriere hinzu, um versehentlich Ihre Callback-Methode zu überschreiben oder andere wissen zu lassen, dass dies interne Logik ist und nicht herumgesprochen werden sollte. – Uzbekjon

1

return true in Ihrer update_contactable Methode:

def update_contactable 
    self.contactable = false #contactable datatype is boolean 
    true 
end 
0

Sie benötigen ein anderes verwenden Rückruf

before_save :update_contactable if: new_record? 

nicht

before_create 
0

Fehlabstellungen Objekt aus ohne Fehler erstellt werden als zhaqiang erwähnt:

def update_contactable 
    self.contactable = false 
    1 == 1 
    end