设计注册控制器获取零资源的自定义操作

时间:2012-06-29 01:06:50

标签: ruby-on-rails devise

基本上我想要有两个单独的操作来更改密码和更改电子邮件,而不只是一个。

我已更新我的路由以指向继承自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%>

这给了我零。

我在这里缺少什么?

谢谢!

2 个答案:

答案 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%>