2012-03-12 13 views
1

私はDevise 1.5.3を使用しています。Rails 3 Devise登録のリダイレクトをカスタマイズする

私はafter_updateのために自分の道をカスタマイズするためのDevise::RegistrationsControllerを継承:

class RegistrationsController < Devise::RegistrationsController 
    protected 
    def after_update_path_for(resource) 
    some_path 
    end 
end 

そのRailsは/views/devise/registrationsviews/registrations/で(など、新規作成)登録アクションのためのビューを見つけようとしますが、ノー後

すべてコピーできます。/views/devise/registrationsviews/registrations/。しかし、私の見解の残りの部分(カスタマイズされたコントローラではない)がまだ/views/devise/registrationsにあるので、それは私には適していません。

どうすれば修正できますか?

答えて

2

私はあなたスコープあなたのRegistrationsController場合、それは工夫の範囲に動作するはずだと思う:あなたはRegistrationsControllerに同じ名前を使用することはできませんし、あなたがviews/devise/my_registrationsviews/devise/registrationsフォルダの名前を変更する必要があり、あなたが持っているもちろん

class Devise::MyRegistrationsController < Devise::RegistrationsController 
    # ... 
end 

別のオプションを同様にあなたのroutes.rbをファイルを更新するには...しかし、この設定で、それが動作するはずです...

、私が思うに、初期化方法を注入/上書きするようになります:

class Devise::RegistrationsController 
    protected 
    def after_update_path_for(resource) 
    some_path 
    end 
end 

これは簡単かもしれません...

+0

ありがとうございました。できます。 –

1

建物の上にVapireの答え。私は注射オプションが最もシンプル/ベストだと思います。

navbarに永続的な「Edit my Registration」を含めて、どのページからでも呼び出せるようにしたいので、私はクリックしたページに戻ってユーザーを送りたいと思っています。

これを行う簡単な方法は、コントローラの動作の一部をオーバーライドし、セッション変数を使用して参照パスを取得することでした。セッション変数を使用すると、エラーを修正するためにフォームを再ロードする必要がある場合は、参照元パスがそのまま保持されます。私が考案したパスワードを無効にする必要がありました@Vapireによって受け入れ答えは、Railsの4のために私のために動作しません

routes.rbを

devise_for :users, :controllers => {:registrations=>'users/registrations'} 

コントローラ/ユーザ/ registrations_controller.rb

class Users::RegistrationsController < Devise::RegistrationsController 
    def edit 
    session[:called_from]=request.referer 
    super #revert to standard behaviour 
    end 

    def after_update_path_for(resource) 
    session[:called_from] #returns to the page called from 
    end 

end 
関連する問題