设计注册控制器获取零资源的自定义操作
基本上我想要有两个单独的操作来更改密码和更改电子邮件,而不只是一个。
我已经更新了我的路由以指向我的新控制器,它inheritance自Devise :: RegistrationsController。
我的routes.rb:
devise_for :users, :controllers => { :registrations => "registrations" } devise_scope :user do get "/users/password" => "registrations#change_password", :as => :change_password end
我的registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController def change_password end end
我的app / views / devise / registrations / change_password.html.erb
这给了我零。
我在这里想念的是什么?
谢谢!
在Devise的内置registrations_controller.rb中 ,有一个authenticate_scope!
创建您正在寻找的resource
对象的方法。 它由prepend_before_filter
执行,但仅适用于某些方法:
class Devise::RegistrationsController < DeviseController ... prepend_before_filter :authenticate_scope!, :only => [:edit, :update, :destroy]`
因此,您只需要告诉自定义控制器在change_password
方法上运行该filter:
class RegistrationsController < Devise::RegistrationsController prepend_before_filter :authenticate_scope!, :only => [:change_password] def change_password end end
class RegistrationsController < Devise::RegistrationsController def change_password super @resource = resource end end
应用程序/视图/设计/注册/ change_password.html.erb
<%=debug @resource%>