2012-06-29 6 views
6

基本的に私はパスワードを変更するために2つのアクションを1つではなく電子メールに変更したいと考えています。ユーザー登録操作のためのカスタムアクションnilリソースを取得する

Devise :: RegistrationsControllerから継承する新しいコントローラを指すようにルートを更新しました。

マイ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 

与えマイregistrations_controller.rb

class RegistrationsController < Devise::RegistrationsController 

    def change_password 
    end 

end 

マイアプリ/ビュー/工夫/登録/ change_password.html.erb

<%=debug resource%> 

私は何もしない。

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

ありがとうございます!考案の内蔵registrations_controller.rb

答えて

-3
class RegistrationsController < Devise::RegistrationsController 

    def change_password 
    super 
    @resource = resource 
    end 
end 

アプリ/ビュー/工夫/登録/ change_password.html.erb

<%=debug @resource%> 
+0

私はこれをテストし、それがなかったの'Devise :: RegistrationsController'スーパークラスは' super'キーワードを参照する 'change_password'メソッドを持っていないので、私のために働きません。 – Zac

10

、あなたが探しているresourceオブジェクトを作成しauthenticate_scope!方法があります。それは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

':change_password'アクションだけを':edit_:update、:destroy'に追加する必要があるでしょう。私の同様のケースでは、私は ':finish'と呼ばれるアクションを持ち、' ​​only::finish'を指定すると、 'resource'は' edit'アクションのために 'nil'です – chaimann

関連する問題