2017-02-27 5 views
0

Ich habe eine Anwendung, die Devise als Authentifizierung verwendet. Ich möchte nicht, dass der Benutzer seine E-Mail-Adresse ändern kann. Ich habe dies getan, indem ich das E-Mail-Attribut so eingestellt habe, dass es nur im Benutzermodell gelesen wird.Rails Devise Rollback-Transaktion gibt keinen Fehler

class User < ActiveRecord::Base 
    attr_readonly :email 
end 

Das funktioniert gut: Rails Rollback der Transaktion. Devise denkt jedoch, dass das Update erfolgreich war und zeigt eine Nachricht erfolgreich an.

"Your account has been updated successfully." 

Ich habe mehrere Sachen ausprobiert einschließlich meiner onw Methode erstellen, die eine Flash-Mitteilung zurückkehren würde, aber es sagt immer wieder, dass das Konto erfolgreich aktualisiert wurde.

Gibt es eine Möglichkeit, einen Fehler zu melden, wenn der Datensatz nicht erfolgreich gespeichert wurde?

Bearbeiten nach Ashvins anwser. Dies ist, was ich in meinem Modell haben:

def email=(address) 
    begin 
    if new_record? 
     write_attribute(:email, address) 
    end 
    rescue Exception => error 
    flash[:alert] = error.message 
    end 
end 

Antwort

0

Ich weiß nicht, habe ich Ihre Frage oder nicht, aber von dem, was ich bekommen finden Lösung. Sie können die Ausnahmebehandlung verwenden, während Rekord-Rollback ist

begin 
    # do some stuff here 
rescue Exception => e 
    flash[:notice] = e.message 
end 
+0

ich den Code versucht haben, aber es ist immer noch sagt, dass es erfolgreich – Samuel

+0

ist zu aktualisieren, welche Aktion durchführen, können Sie bitte Code hier einfügen, so kann ich genaue Idee . – ashvin

+0

Ich habe den benutzerdefinierten Code hinzugefügt, den ich verwende. Ich denke, dass es besser sein könnte, den Controller zu überprüfen, wenn sich die E-Mail-Adressen von den Params unterscheiden [: email]. – Samuel