基本的にどちらもDeviseにおいてルーティングのカスタマイズをしたい場合に使うDevise独自のDSLになります。
devise_for
devise_forの内部的にはdevise_scopeメソッドを使用してルーティングが作成されています。
1 |
devise_for :users |
devise内のコントローラで処理をする際に、スコープを設定するという処理をしています。
省略されていますが、細かく書けば下記のように記述し直すことが可能です。(というか普通のアプリではほぼ間違いなくカスタマイズすることになるので下記の文法は把握しておいた方が良いです。)
1 2 3 4 5 |
devise_for( :users, path: 'users', module: 'devise' ) |
:users
deviseのログインユーザーの対象となっているモデル
path
deviseで生成するURLの基準となるパスです。これを書き換えればURLを変更できます。
modules
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に新しくルーティングを追加したい場合に使います。(これを使わないとエラーが発生します。)
1 2 3 |
devise_scope :users do get 'ルーティング情報', to: 'users/registrations#アクション' end |
例えば、UserモデルのためにDeviseコントローラを検証したコントローラのアクションを作成した場合は上記のように指定する必要があります。
例
新しいユーザーを作る場合のルーティング指定
1 2 3 |
devise_scope :customer do get 'signup', to: 'devise/registrations#new' end |
この記事へのコメントはありません。