2012-06-29 10 views
6

básicamente quiero tener dos acciones separadas para cambiar la contraseña y cambiar el correo electrónico en lugar de solo uno.acción personalizada para diseñar el controlador de registros que obtiene el recurso nulo

He actualizado mis rutas para apuntar a mi nuevo controlador que hereda de Devise :: RegistrationsController.

Mi 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 

Mi registrations_controller.rb

class RegistrationsController < Devise::RegistrationsController 

    def change_password 
    end 

end 

Mi app/views/diseñar/registros/change_password.html.erb

<%=debug resource%> 

que da yo nil.

¿Qué me falta aquí?

Gracias!

Respuesta

-3
class RegistrationsController < Devise::RegistrationsController 

    def change_password 
    super 
    @resource = resource 
    end 
end 

app/views/diseñar/registros/change_password.html.erb

<%=debug @resource%> 
+0

He probado esto y no me paré No funciona para mí porque la superclase 'Devise :: RegistrationsController' no tiene ningún método' change_password' para que la palabra clave 'super' haga referencia. – Zac

10

En Legado de una función de registrations_controller.rb, hay un método authenticate_scope! que crea el objeto resource que estás buscando. Es ejecutado por un prepend_before_filter, pero sólo para ciertos métodos:

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

Así que sólo hay que decirle a su controlador personalizado para ejecutar ese filtro en su change_password método:

class RegistrationsController < Devise::RegistrationsController 

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

    def change_password 
    end 

end 
+1

Supongo que necesitarás agregar la acción ': change_password' a los valores predeterminados' [: edit,: update,: destroy] 'en lugar de especificar solo': change_password'. en mi caso similar, tengo una acción llamada ': finish', y si especifico' only:: finish', entonces 'resource' es' nil' para 'edit' action – chaimann

Cuestiones relacionadas