Affe flickt Devise (oder irgendein Rails-Juwel)
Ich bin mit dem Ausdenken Authentifizierung gem in meinem Rails Projekt, und ich möchte die Tasten ändern, dass es in flash-Warnungen. (Ausarbeitung verwendet :Hinweis und :alert-flash-Schlüssel, aber das will ich ändern Sie Sie :Erfolg und :Fehler, so dass ich anzeigen kann schöner grün/roten Kästen mit Bootstrap.)
So, ich möchte in der Lage sein, um irgendwie überschreiben der set_flash_message
Methode in DeviseController.
Hier die neue Methode:
def set_flash_message(key, kind, options = {})
if key == 'alert'
key = 'error'
elsif key == 'notice'
key = 'success'
end
message = find_message(kind, options)
flash[key] = message if message.present?
end
Aber ich weiß einfach nicht, wohin damit.
UPDATE:
Basierend auf einer Antwort, die ich erstellt eine config - /- Initialisierungen/überschreibt.rb-Datei mit dem folgenden code:
class DeviseController
def set_flash_message(key, kind, options = {})
if key == 'alert'
key = 'error'
elsif key == 'notice'
key = 'success'
end
message = find_message(kind, options)
flash[key] = message if message.present?
end
end
Aber dies verursacht einen Fehler auf jeder Entwickeln Aktion:
Routing-Fehler: undefined method 'prepend_before_filter' für
Entwickeln::SessionsController:Klasse
InformationsquelleAutor der Frage Yarin | 2013-06-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie versuchen, öffnen Sie eine Klasse, es ist die gleiche syntax wie die Deklaration einer neuen Klasse:
Wenn dieser code ausgeführt wird, bevor die eigentliche Deklaration der Klasse, Sie erbt von Object, statt der Verlängerung der Klasse deklariert Entwickeln. Stattdessen versuche ich, die folgenden
Diese Weise erhalten Sie eine Fehlermeldung, wenn
DeviseController
wurde nicht deklariert. Als Ergebnis, werden Sie wahrscheinlich am Ende mitInformationsquelleAutor der Antwort aceofspades
Mit Schienen 4 @aceofspades Antwort hat bei mir nicht funktioniert.
Mich immer require':
cannot load such file -- devise/app/controllers/devise_controller (LoadError)
Statt Schrauben, um mit lade-Reihenfolge der Initialisierungen verwendet habe ich das
to_prepare
Ereignis-hook ohne eine require-Anweisung. Es sorgt dafür, dass die monkey-patching passiert, bevor die erste Anfrage. Dieser Effekt ist ähnlichafter_initialize
Haken, sorgt aber dafür, dass monkey-patching ist inzwischen in der Entwicklung Modus, nach einem reload (im prod-Modus das Ergebnis ist identisch).N. B. die rails-Dokumentation auf
to_prepare
ist immer noch falsch: Siehe diese Github issueInformationsquelleAutor der Antwort ARO
Was über das hinzufügen in den override-Initialisierer alias-Namen für die Attribute des flash-hash wie dieser:
Damit sollte Ihre Anwendung zum Lesen von flash[:notice] oder flash[:success](flash.Ankündigung und flash.Erfolg)
InformationsquelleAutor der Antwort Laura Popa
In Ihrem Initialisierung Datei :
Dies ist ziemlich brutal, aber wird tun, was Sie wollen.
Das mixin wird, löschen Sie die Vorherige set_flash_message Methode zwingt den Unterklassen zu fallen zurück in die mixin-Methode.
Bearbeiten:
selbst.aufgenommen wird aufgerufen, wenn das mixin in einer Klasse. Die klass parameter ist die Klasse, die das mixin aufgenommen wurde. In diesem Fall klass ist DeviseController, und wir nennen remove_method.
InformationsquelleAutor der Antwort RedXVII
Müssen Sie überschreiben DeviseController, während sich um Ihre Superklasse in Ihre Initialisierung.
Etwas wie:
InformationsquelleAutor der Antwort Borski
Dies ist die Art von Sache, die Sie wollen, setzen Sie auf initialisieren, Schienen-Ordner, weil es eine custom-config für diese Anwendung insbesondere die zweite sollten Sie nutzen, etwa so:
dann sollten Sie sich das erwartete Verhalten.
hoffe es hilft, da ich nicht getestet, nicht geben pls ein feedback und ich werde helfen, Sie versuchen, etwas unterschiedlich.
InformationsquelleAutor der Antwort vinicius gati
Ich weiß, dies ist ein Alter thread, aber das könnte noch hilfreich sein. Sie sollten in der Lage sein zu verlangen, die Datei aus dem Edelstein Verzeichnis, indem Sie den Motor called_from Weg.
InformationsquelleAutor der Antwort userbard