基本上我想要有两个单独的操作来更改密码和更改电子邮件,而不只是一个。
我已更新我的路由以指向继承自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
<%=debug resource%>
这给了我零。
我在这里缺少什么?
谢谢!
答案 0 :(得分:10)
在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
方法上运行该过滤器:
class RegistrationsController < Devise::RegistrationsController
prepend_before_filter :authenticate_scope!, :only => [:change_password]
def change_password
end
end
答案 1 :(得分:-3)
class RegistrationsController < Devise::RegistrationsController
def change_password
super
@resource = resource
end
end
应用程序/视图/设计/注册/ change_password.html.erb
<%=debug @resource%>