🎉

devise_for devise_scope

2024/01/10に公開

はじめに

ルーティングに記載している際にどちらも記述する必要があったが、
そもそもなんだこれはと思い、まとめてみました。

devise_for

ユーザーと管理者で分けたときにroutes.rbにこんな書き方をすると思います。

devise_for :user

省略されていますが、細かく書けば以下のようになります。

devise_for(
  :users,
  path: 'users',
  module: 'devise'
)
  • :users
    deviseのログインユーザーの対象モデル

  • path
     deviseで生成されるパス。URLを変更するときに使用する。

  • module 
     deviseのコントローラの場所を指します。
    deviseではデフォルトだと「controllers/devise/session_controller.rb」と「controllers/devise/registration_controller.rb」があります。
    「devise」はそのディレクトリ名ですね。一般的なアプリケーションの場合は利用者の画面と管理者側の画面があることが多いでしょうから
    ディレクトリが「controller/devise/users」と「controller/devise/admins」で分けて別々に設定をすることが多いです。
    その場合の指定は「module: 'devise/users'」や「module: 'devise/admins'」とします。

devise_scope

deviseに新しくルーティングを追加したいときに使用します。

devise_scope :users do
   post "users/guest_sign_in", to: "sessions#guest_sign_in"
end

これはゲストログインする際に使用するコードです。

終わりに

devise_forとdevise_scopeの違いはdevise_forの内部でdevise_scopeメソッドを使用してルーティングが作成されているってことですね。

Discussion