6

基本的に、パスワードの変更とメールの変更には、1 つではなく 2 つの別々のアクションが必要です。

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

私のアプリ/views/devise/registrations/change_password.html.erb

<%=debug resource%>

それは私にゼロを与えます。

ここで何が欠けていますか?

ありがとう!

4

2 に答える 2

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
于 2013-04-08T23:47:31.950 に答える
-3
class RegistrationsController < Devise::RegistrationsController

  def change_password
    super
    @resource = resource
  end
end

app/views/devise/registrations/change_password.html.erb

<%=debug @resource%>
于 2012-08-01T09:16:49.663 に答える