Railsのdeviseでユーザー登録機能を実装する3ステップは?

スポンサーリンク

 

こんにちは、Railsエンジニアにょけん(@nyoken_box)です。

deviseでユーザー(会員)登録機能を実装する手順をまとめました。

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というカラムが追加されました。

 

一口メモ

余談ですが、会員登録時には「必要項目が空欄じゃないか」などのチェックができた方が便利ですよね?

これはユーザーの入力項目にある程度制限を設けることで実現可能です。

必要そうなチェック項目をまとめているので、興味があれば以下記事をご覧ください。

>>参考:deviseでモデル作成後に実施したい3つのバリデーションとは?

 

後にユーザーを表示する画面等を作るので、まずは適当に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です。

スポンサーリンク