ログインに成功した後にカスタムページにリダイレクトして、テスト担当者の名前と年齢(テストデータ)を入力して新しいレコードを作成するための、デバイス認証gemのルートの問題についてサポートが必要です。
私はRails 3をデバイスバージョン1.4.9で使用しています
私のルートは以下の通りです
new_user_session GET /users/sign_in(.:format) {:action=>"new", :controller=>"devise/sessions"}
user_session POST /users/sign_in(.:format) {:action=>"create", :controller=>"devise/sessions"}
destroy_user_session DELETE /users/sign_out(.:format) {:action=>"destroy", :controller=>"devise/sessions"}
user_password POST /users/password(.:format) {:action=>"create", :controller=>"devise/passwords"}
new_user_password GET /users/password/new(.:format) {:action=>"new", :controller=>"devise/passwords"}
edit_user_password GET /users/password/edit(.:format) {:action=>"edit", :controller=>"devise/passwords"}
PUT /users/password(.:format) {:action=>"update", :controller=>"devise/passwords"}
cancel_user_registration GET /users/cancel(.:format) {:action=>"cancel", :controller=>"devise/registrations"}
user_registration POST /users(.:format) {:action=>"create", :controller=>"devise/registrations"}
new_user_registration GET /users/sign_up(.:format) {:action=>"new", :controller=>"devise/registrations"}
edit_user_registration GET /users/edit(.:format) {:action=>"edit", :controller=>"devise/registrations"}
PUT /users(.:format) {:action=>"update", :controller=>"devise/registrations"}
DELETE /users(.:format) {:action=>"destroy", :controller=>"devise/registrations"}
testers GET /testers(.:format) {:action=>"index", :controller=>"testers"}
POST /testers(.:format) {:action=>"create", :controller=>"testers"}
new_tester GET /testers/new(.:format) {:action=>"new", :controller=>"testers"}
edit_tester GET /testers/:id/edit(.:format) {:action=>"edit", :controller=>"testers"}
tester GET /testers/:id(.:format) {:action=>"show", :controller=>"testers"}
PUT /testers/:id(.:format) {:action=>"update", :controller=>"testers"}
DELETE /testers/:id(.:format) {:action=>"destroy", :controller=>"testers"}
root / {:controller=>"testers", :action=>"index"}
アプリケーションコントローラーで、以下のようなメソッドをオーバーライドしようとしましたが、役に立たなかったため、テスターインデックスにルーティングされました。
class ApplicationController < ActionController::Base
protect_from_forgery
def after_sign_in_path_for(resource)
new_tester_path
end
end
私のroutes.rbファイルには以下の行があります
Testing::Application.routes.draw do
devise_for :users
resources :testers
root :to => 'testers#index'
コードの多くはスキャフォールディングで実行されましたが、new_tester_pathまたはルート/ testers/newにリダイレクトする方法を理解できませんでしたsuccessful sign_inユーザーの電子メールとパスワードによる。
誰かが私が欠けているものを教えてもらえますか.....オーバーライド関数を書いている間、私が指定する必要がある正確なルートを知りたいです。
テスト中に私はこのような愚かなことを試みましたが、グーグルページも開いていません... :(
class ApplicationController < ActionController::Base
protect_from_forgery
helper ApplicationHelper
def after_sign_in_path_for(resource)
"www.google.com"
end
def after_sign_up_path_for(resource)
"www.google.com"
end
def after_update_path_for(resource)
"www.google.com"
end
このスニペットを使用してください:
class ApplicationController < ActionController::Base
def after_sign_in_path_for(user)
user_url(user)
end
end
セッションでuser_return_toパスを設定してみてください。
session['user_return_to'] = new_tester_path
Devise :: SessionsControllerから派生したコントローラーでそれを行うことができます
RailsエンジンのApplicationController内のafter_sign_in_path_for
またはafter_sign_out_path_for
ヘルパーメソッドをオーバーライドしようとして問題が発生した場合は、これを確認することをお勧めします 回答 。
ApplicationControllerの代わりにエンジンのSessionsControllerをオーバーライドする必要がある方法について説明します。
これは相続の問題だと思います。 after_sign_in_path_forは、もともとDevise :: SessionsController内で定義されています。 SessionsControllerをDevise :: SessionsControllerから継承させ、そのコントローラー内で再定義することで、オーバーライドできます。
Deviseのドキュメントでは、 サインインが成功すると特定のページにリダイレクトする までのすべての手順が説明されています。テクニックを組み合わせることで、サインインに成功した後、ユーザーを多くの場所にリダイレクトできます。
履歴書は次のとおりです。
これは、Devise :: SessionsControllerから継承したコントローラーで実行できます。まず、controllers/users /sessions_controller.rbで実行できます。
module Users
class SessionsController < Devise::SessionsController
def new
if params[:redirect_to].present?
self.resource = resource_class.new(sign_in_params)
store_location_for(resource, params[:redirect_to])
end
super
end
end
end
Config/routers.rbには、次のものも追加されています。
devise_for :users, controllers: {sessions: 'users/sessions'}
また、ApplicationControllerにカスタムafter_sign_in_path_forを追加する必要があります
class ApplicationController < ActionController::Base
protected
def after_sign_in_path_for(resource)
stored_location_for(resource) || root_path
end
end
私が知っているように、これはすべてのDeviseバージョンで機能します。
あなたは何も悪いことをしていないようです。多分これはDeviseの問題です。
Railsアプリでこれを分離し、Deviseで問題を開いてみてください。