どうした?
前回の記事では、Deviseを導入しUserモデルを作成しました。
今回の記事では、
- ルーティングを設定し、URLとパスをカスタマイズ
- コントローラファイルを作成し、アクションを設定
- ビューファイルを用意し、ページにアクセスする
を目標に進めていきます。
今回目指すもの
前回作成したUserモデルに対して、以下の処理をするためのルーティングを作成していきます。
registrations_controller
HTTPリクエスト | パス | URL | アクション | 処理内容 |
---|---|---|---|---|
get | new_user | sign_up | new | ユーザーの新規作成フォーム |
post | users | users | create | ユーザーの新規作成ができる |
get | edit_user | users/:id/edit | edit | ユーザー情報の編集フォーム |
patch | user | users/:id | update | ユーザー情報の編集ができる |
sessions_controller
HTTPリクエスト | パス | URL | アクション | 処理内容 |
---|---|---|---|---|
get | login | login | new | ユーザーのログインフォーム |
post | login | create | ユーザーがログインできる | |
destroy | logout | logout | delete | ユーザーがログアウトできる |
手順
ルーティングの設定
まずは usersに対してルーティングを設定していきます。
devise_for :users
このままではコントローラがないため、ルーティングは機能しません。
コントローラファイルを作っていきましょう。
コントローラファイルの作成
まずはページアクセスのためにコントローラファイルを準備します。
$ rails generate devise:controllers users
これにより、app/controllers
フォルダ内にusersフォルダといくつかのコントローラファイルが生成されます。
生成されたusersフォルダの中身は以下のようです。
- users
- confirmations_controller.rb
- omniauth_callbacks_controller.rb
- passwords_controller.rb
- resistrations_controller.rb
- sessions_controller.rb
- unlocks_controller.rb
このうち必要なものはresistrations_controller.rb
とsessions_controller.rb
なので、それ以外は削除してしまいましょう。
resistrations_controller.rb
このコントローラでは、ユーザー作成と編集が行えるようにします。
ルーティングの設定
ルーティングファイルにて「Users::RegistrationsControllerを使うよ」という宣言をします。
# 認証
devise_for :users, controllers: {
registrations: 'users/registrations'
}
これにより、Deviseは自動で以下のルーティングを生成します。
$ rails routes | grep users
cancel_user_registration GET /users/cancel(.:format) users/registrations#cancel
new_user_registration GET /users/sign_up(.:format) users/registrations#new
edit_user_registration GET /users/edit(.:format) users/registrations#edit
user_registration PATCH /users(.:format) users/registrations#update
PUT /users(.:format) users/registrations#update
DELETE /users(.:format) users/registrations#destroy
POST /users(.:format) users/registrations#create
各アクションの設定
resistrationsコントローラのnewアクションを設定しましょう。
コントローラファイルを見ると、各アクションがコメントアウトされています。
newアクションを使用するので、コメントアウトを取り消しましょう。
# GET /resource/sign_up
def new
super
end
newアクションの中身を見ると、super
とだけ書かれています。
superということは、親クラスであるDevise::RegistrationsController
を継承しているようです。
今の所は無視して進めます。
ビューファイルの作成
ビューファイルを用意してusers/new
ページを表示させましょう。
ルーティングを確認すると
new_user_registration GET /users/sign_up(.:format) users/registrations#new
とあるので、ビューファイルはapp/views/users/resistrations
フォルダ内に作れば良いことが分かります。
試しに空のnew.html.erb
ファイルを作成してみます。
/users/sign_upにアクセスしてみると、無事にページを開けていることが分かります。
sessions_controller
このコントローラでは、ユーザーがログインとログアウトを行えるようにします。
resistrations_controllerと同様の手順で作業します。
まずは、ルーティングを追加しましょう。
devise_for :users, controllers: {
registrations: 'users/registrations', # カンマで区切るのを忘れない!
sessions: 'users/sessions'
}
ルーティングを確認すると、
new_user_session GET /users/sign_in(.:format) users/sessions#new
user_session POST /users/sign_in(.:format) users/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) users/sessions#destroy
が追加されているので、new.html.erbはapp/views/users/sessions
フォルダ内に作れば良いことが分かります。
ビューファイルを作成したら、sessionsコントローラにてnew
アクションのコメントアウトを取り消しましょう。
/users/sign_inにアクセスすることができるかと思います。
URLとパスをカスタマイズしよう
現在のURLやパスはDeviseが自動で作成したものです。
これを、設計に沿って変更しましょう。
ルーティングファイルを以下のように修正します。
devise_for :users, controllers: {
registrations: 'users/registrations',
sessions: 'users/sessions'
}, skip: [:registrations, :sessions]
devise_scope :user do
get 'sign_up', to: 'users/registrations#new', as: :new_user
post 'users', to: 'users/registrations#create' as: :users
get 'users/:id/edit', to: 'users/registrations#edit', as: :edit_user
patch 'users/:id', to: 'users/registrations#update' as: :user
get 'login', to: 'users/sessions#new', as: :login
post 'login', to: 'users/sessions#create'
delete 'logout', to: 'users/sessions#destroy', as: :logout
end
-
devise_for
ブロックでは、コントローラの呼び出し -
skip:
では、devise_for
が自動で作成したルーティングを削除(カスタマイズしたい為) -
devise_scope
では、URLとアクションの指定 -
as:
では、パスの指定
をしています。
ルーティングを確認すると
$ routes | grep users
new_user GET /sign_up(.:format) users/registrations#new
users POST /users(.:format) users/registrations#create
edit_user GET /users/:id/edit(.:format) users/registrations#edit
user PATCH /users/:id(.:format) users/registrations#update
login GET /login(.:format) users/sessions#new
POST /login(.:format) users/sessions#create
logout DELETE /logout(.:format) users/sessions#destroy
が得られます。
/sign_upにアクセスすると、無事にページが表示されています。
まとめ
今回はルーティングを設定しました。
次回はコントローラとビューファイルを整えて、
- ユーザー作成
- ログイン
ができるようにします。
最後までお読みいただきありがとうございました。