こんにちは、Railsエンジニアにょけん(@nyoken_box)です。
deviseでユーザー(会員)登録機能を実装する手順をまとめました。
deviseのインストールがまだの方は、まずはインストールください。
STEP1 deviseでUserモデルを作成する
deviseのインストールが完了したら、さっそくdeviseでモデルを作成してみましょう。
今回は、よく使われる「Userモデル」を作成します。
以下のコマンドを入力してください。
①deviseでユーザーモデル作成
$ rails g devise user
userモデルファイル(app/models/user.rb
)と、マイグレーションファイル(db/migrate/日時_devise_create_users.rb
)が作成されるので、マイグレーションを実行しましょう。
②マイグレーション実行
$ bundle exec rake db:migrate
ただし、現段階のマイグレーションファイルには、ユーザー情報がemail
しかありません。
必要に応じて、カラムを追加してあげましょう。(任意)
ここでは例として、name
という情報を追加します。
以下のコマンドを実行してください。
③必要なカラムを追加(ここではnameを追加)
$ rails generate migration add_name_to_users name:string
新たにマイグレーションファイルが1つ作成されるため、再度マイグレーションを実行します。
④マイグレーション実行
$ bundle exec rake db:migrate
これで、Userモデルにname
というカラムが追加されました。
余談ですが、会員登録時には「必要項目が空欄じゃないか」などのチェックができた方が便利ですよね?
これはユーザーの入力項目にある程度制限を設けることで実現可能です。
必要そうなチェック項目をまとめているので、興味があれば以下記事をご覧ください。
後にユーザーを表示する画面等を作るので、まずは適当に1人ユーザーを追加しておきましょう。
「rails c」でコンソールを起動して追加します。
⑤ユーザーを登録する
$ rails console >> User.create(name: "Taro Yamada", email: "taro@example.com", password: "yamada")
STEP2 データベース情報を用いたルーティング設定
次にルーティングの設定を行います。
config/routes.rb
に以下を追加することで、Usersというデータベース内の情報にアクセスするURLを取得できます。
①Usersデータベースを用いたルーティングを設定する
resources :users
「rake routes」というコマンドで取得したURLを確認できるのですが、不要なURLまで作成されています。
例えば、ユーザー登録についてはdeviseを利用する前提のため、ユーザー登録用のURL(users/new
)などは必要ありません。
そこで、only
で使用するものを指定しましょう。
②で設定したconfig/routes.rb
に、以下ピンク色の箇所を追記してください。
②onlyを用いて、使用するURLを絞り込む
resources :users, only: [:show]
ひとまず、「users/show/:id」というURLだけを使えるようにしておきます。
モデルを作成してユーザーを1人追加し、ルーティング設定も終わりました。
ただ、このままではユーザーの情報を用いた画面を表示することができません。
というのもdeviseはあくまで登録機能であるため、画面の生成は自身で行う必要があります。
てわけで、User用のコントローラーとビューファイルを作成しましょう。
STEP3 User用のコントローラーとビューファイル作成
コントローラー作成時にアクションを持たせることで、そのアクションのビューが自動生成されます。
①ユーザーコントローラーおよびshow
アクションを作成する
$ rails generate controller Users show
これで設定は完了なのですが、せっかくなので本当にデータベース内の情報を持ってきて表示できるのかを確認してみましょう。
まず、コントローラー(app/controllers/users_controller.rb
)内のshow
アクションを書き換えます。
②Usersコントローラーにおけるshowアクションの設定
class UsersController < ApplicationController def show @user = User.find(params[:id]) end end
Railsでは、ブラウザから送られてきた情報を、params[:パラメータ名]という形式で取得できます。
よって上記は、ブラウザから送られてくるURLに含まれているidを元にして、該当Userの情報をデータベースから探しているわけですね。
最後に、ビューでユーザー情報を表示してみましょう。
app/views/show.html.erb
を以下に変更します。
③データベース内の情報をビューで表示してみる
<%= @user.name %>, <%= @user.email %>
STEP1の⑤で登録した情報が表示されていればOKです。
コメント