複数の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か判別してます。

パスの設定はどこを通っているか、引数(情報)を渡せているか、または受け散る場所があるかが大切なことを学びました。