🎉
devise_for devise_scope
はじめに
ルーティングに記載している際にどちらも記述する必要があったが、
そもそもなんだこれはと思い、まとめてみました。
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