2012-06-29 11 views
6

fondamentalmente voglio avere due azioni separate per cambiare password e cambiare email invece di una sola.azione personalizzata per controller di registrazioni elaborate che ottiene risorse nulle

Ho aggiornato i miei percorsi per puntare al mio nuovo controller che eredita da Devise :: RegistrationsController.

mio routes.rb:

devise_for :users, :controllers => { :registrations => "registrations" } 

devise_scope :user do 
    get "https://stackoverflow.com/users/password" => "registrations#change_password", :as => :change_password 
end 

mio registrations_controller.rb

class RegistrationsController < Devise::RegistrationsController 

    def change_password 
    end 

end 

mia app/views/ideare/iscrizioni/change_password.html.erb

<%=debug resource%> 

che dà io nil

Cosa mi manca qui?

Grazie!

risposta

-3
class RegistrationsController < Devise::RegistrationsController 

    def change_password 
    super 
    @resource = resource 
    end 
end 

app/views/ideare/iscrizioni/change_password.html.erb

<%=debug @resource%> 
+0

ho provato questo e didn lavoro per me perché la superclasse 'Devise :: RegistrationsController' non ha il metodo' change_password' per fare riferimento alla parola chiave 'super'. – Zac

10

In di Devise built-in registrations_controller.rb, esiste un metodo authenticate_scope! che crea l'oggetto resource che stai cercando. Esso viene eseguito da un prepend_before_filter, ma solo per alcuni metodi:

class Devise::RegistrationsController < DeviseController 
    ... 
    prepend_before_filter :authenticate_scope!, :only => [:edit, :update, :destroy]` 

Quindi è sufficiente dire il controller personalizzato per eseguire quel filtro sul vostro change_password metodo:

class RegistrationsController < Devise::RegistrationsController 

    prepend_before_filter :authenticate_scope!, :only => [:change_password] 

    def change_password 
    end 

end 
+1

credo che dovrai aggiungere l'azione ': change_password' a quelle predefinite' [: edit,: update,: destroy] 'invece di specificare solo:: change_password'. nel mio caso simile, ho un'azione chiamata ': finish', e se specifico' only:: finish', quindi 'resource' è' nil' per l'azione 'edit' – chaimann

Problemi correlati