2013-05-02 18 views
7

Ich versuche, das Benutzermodell durch Devise mit AJAX zu aktualisieren und lassen Sie Devise mit der richtigen Javascript-Datei reagieren.Devise Registrierung # Update über JS in Rails

Ich mag die Form der Ferne auf die Registrierungen # Update-Aktion unterbreiten, aber das funktioniert nicht mit der Standardantwort von Devise, die folgenden von dem RegistrationsController verwendet:

respond_with resource, :location => after_update_path_for(resource) 

Die oben versucht, Umleiten auf die Standardroute statt Rendern der update.js.erb-Datei. Ich bin in der Lage, die Aktion zu überschreiben und habe es mit folgenden Änderung arbeiten:

respond_to do |format| 
    format.html 
    format.js 
end 

Aber dies scheint sehr brutale Gewalt, wie ich die gesamte Aktion bin überschreiben. Gibt es einen einfachen Weg für Devise, um mit JavaScript zu reagieren, statt seine Standardumleitung durchzuführen?

+0

Vielleicht kann dies helfen http://natashatherobot.com/devise-rails-sign-in/ – Mindbreaker

Antwort

11

Es musste einfach eine Zeile zum RegistrationsController hinzugefügt werden, damit Devise sowohl mit html als auch mit js antworten kann.

class RegistrationsController < Devise::RegistrationsController 
    respond_to :html, :js 
end 

Lesen Sie weiter, wie read_with wirklich geholfen hat. Ein paar gute Links:

Rails API Responder

AsciiCast

+0

Interessanterweise ist diese Lösung für mich funktioniert, wenn die #create Aktion den traurigen Weg nimmt und setzt Fehler auf der Ressource, in diesem Fall wird 'create.js.erb' so genannt, wie Sie es erwarten würden. Dies ist mit "remote: true" in der Form. Aber im glücklichen Fall antwortet es mit HTML. Ich sah ein ähnliches Problem mit Sessions # destroy, wo ich eine private Devise-Methode ('respond_to_on_destroy') überschreiben musste, um sie mit format.js zu beantworten. Zumindest in einigen Fällen hat Devise ihren Antwortcode in Controller-Methoden heruntergestuft, wo man nicht darauf kommt, ohne private Methoden zu überschreiben. – user3670743

2

ich soved das kürzlich durch die folgenden Anpassungen vornehmen, zusätzlich zum Hinzufügen remote: true zum Formular hinzu:

config/initializers/ersinnen:

# If http headers should be returned for AJAX requests. True by default. 
config.http_authenticatable_on_xhr = false 

config/routes.rb:

devise_for :users, controllers: { registrations: 'users/registrations' } 

Controller/users/registrations_controller.rb:

class Users::RegistrationsController < Devise::RegistrationsController 

    respond_to :html, :js 

end 

views/users/Anmeldungen/create.js.erb:

alert('success'); 

Ansichten/Benutzer/Registrierungen/new.js.erb:

alert('invalid'); 
Verwandte Themen