2010-08-03 23 views
5

Ich habe ein Schienenmodell User, das name, email und hash Felder hat.before_create in Schienen Modell

ich speichern Daten, indem Sie diese:

@u = User.create(:name=>'test', :email=>"[email protected]") 
@u.save 

Wie kann ich die before_create Rückruf übernehmen, so dass vor der Aufzeichnung der Hash-Wert zu speichern wird eine Hash-Zeichenfolge durch folgenden Code:

Digest::SHA1.hexdigest('something secret' + email) 

Wie sieht mein User Modell aus?

class Employee < ActiveRecord::Base 
    before_create :set_hash 

    def set_hash 
     //what goes in here? 
    end 
end 
+4

Übrigens spart User.create den Benutzer, so @ u.save unnötig ist. Wenn Sie etwas zwischen dem Erstellen eines neuen Modells und dem Speichern tun möchten, verwenden Sie User.new mit denselben Parametern. – Troy

Antwort

8

Sie können mit dem Schlüsselwort self auf Instanzvariablen Ihres aktuellen Modells zugreifen (und diese ändern).

def set_hash 
    self.email = Digest::SHA1.hexdigest('something secret' + self.email) 
end