複数のdeviseでログイン後、新規登録後のパスを変更したい。
オリジナルアプリケーション作成中です。
複数のdeviseを作りログイン後のルーティング後のパスを設定したい場合にどうしたらいいのかをまとめました。
まず2つ以上のdeviseのinstall、devise_parameter_sanitizerの設定などは出来ているとします。
出来てない方はこちらを参考にしてみてください。
複数のdeviseを作成して、別々のログイン画面を作る際のファイル作成からルーティング設定
2つのdeviseを作成した時にdevise_parameter_sanitizerを個別の設定
<<やりたい事>>
ネストさせたdeviseのルーティング後のパスを設定したい。
http://localhost:3000/users/1/medicines
↑このようなURL作りたい。 usersのidが1のmedicineのindexのルーティン設定をしたいのです。
①ルーティングの設定
ネストさせたいのでルーティングのネストをします。ここでmember doを使います。
member doとは? routingにidが付ける役割をします。
resources :users do
member do
resources :medicines
end
end
このようにネストします。
②userのdeviseのコントローラー設定をします。
protected
def after_sign_in_path_for(*)
medicines_path(current_user.id)
end
解説します。
ログイン画面後のパスの変更するので、記述する場合は、/users/session_controller.rbに記述します。
今回複数のdeviseでのパスの変更ですのでusersディレクトリに書きます。doctordeviseだとdoctor/session_controller.rbに記述します。
after_sign_in_path_forはdeviseのサインイン後のパスを指定してくれるメソッドです。
(*)は引数でログイン情報が入っています。ログインの際にもらった情報をルーティングからコントローラーに渡しています。
medicines_path(current_user.id)としてidを持ったmedicines_pathに行き、current_user.idは受け取った情報からどのidか判別してます。
パスの設定はどこを通っているか、引数(情報)を渡せているか、または受け散る場所があるかが大切なことを学びました。
Author And Source
この問題について(複数のdeviseでログイン後、新規登録後のパスを変更したい。), 我々は、より多くの情報をここで見つけました https://qiita.com/kinpin/items/57b1657f9054189956c3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .