2011-10-25 12 views
2

申し込み、サインインなどの後にdevise execute関数を作成するにはどうすればよいですか?アプリケーションコントローラにこのような関数を入れてみました。このDevise Sign Up機能

devise_for :users do 
    get "https://stackoverflow.com/users/sign_out" => "devise/sessions#destroy", :as => :destroy_user_session 
end 

のように私のルートで

class ApplicationController < ActionController::Base 
    private 
    def after_sign_up_path_for(resource_or_scope) 
    execute stuff 
    end 
end 

これは何もしていないようです。私もこれは同様に何もしていないようだ

devise_for :users, :controllers => {:sessions => 'devise/sessions'} do 
    get "https://stackoverflow.com/users/sign_out" => "devise/sessions#destroy", :as => :destroy_user_session 
end 

このように私のルートでそう

class SessionsController < Devise::SessionsController 
    functions 
end 

のようなセッションコントローラを作ってみました、私は応答考案することに欠けている何かがあります。あなたはDevise::SessionsControllerから継承し、独自のsessions_controllerを作成し、カスタマイズしたいアクションを上書きすることができ

+0

あなたは何をしようとしているのか、どのように失敗しているのかについて詳しく説明できますか? –

答えて

7

https://github.com/fortuity/rails3-subdomain-devise/wiki/Tutorial-(Walkthrough(私が最初にこのチュートリアルを使用して工夫を設定しました)。あなたができるたとえば、ユーザーがサインインした後に何らかのアクションを実行するために、:

class SessionsController < Devise::SessionsController 
    def create 
    super 
    perform_custom_stuff 
    end 
end 

superの呼び出しは不十分である場合、あなたはあなたのコントローラにDevise::SessionsController#createの現在の実装を再現することができます。次に、何が起こっているかを完全に制御し、正確なニーズに合わせてカスタマイズできます。これは最善の解決策ではないかもしれませんが、(少なくともあなたを続けるためには)必要かもしれません。

+0

私はredirect_to 'www.google.ca'と言っているように、それは他のものと同じようにしません。 – Kevin

+0

具体的には、私はレンダーjson:resource_nameを行いたいと思っています。 to_json、:callback => params [:callback]、サインアップ時にJSONP配列を取得します。それが失敗するのは、セッションを変更するために何かを置く(サインインしてメインページに移動し、私が修正を加えなかったかのように振る舞う)ときは、サインインまたはサインアップで何もしないだけです) – Kevin

+0

あなたのルートにあるKevinは、あなたのセッションコントローラーを使用するようにdeviseに指示しています。あなたのルートを変更する@Mike Mazurのアドバイスに従ってください。それはチャンピオンのように動作するはずです。 – janders223

0

私はちょうどafter_sign_up_path_forと同様の方法は、パスを返すことを意図していることを言及したいと思います。私はそれが副作用のためのその種の方法に頼ることは良い考えではないと思う。

関連する問題