ユーザー管理機能を実装する。 | Ruby on Rails


  1. Gemfile に $ gem 'devise' を追記して、$ bundle install する。

Devise の設定ファイルを作成し、 User モデルを作成する。

  1. $ rails g devise:install を実行して、Devise の設定ファイルを作成する。
  2. $ rails g devise user を実行して、Devise の機能を持つ User モデルを作成する。
    • この時に、ルーティングに devise_for :users という Devise の機能へリクエストするためのルーティングが生成される。
  3. $ rails db:migrate を実行して、Devise の機能を持つ User モデルをマイグレートする。
  4. ログイン画面等の Devise が持つビューファイルを変更したい場合は、$ rails g devise:views を実行してビューファイルを作成する。

メールアドレスとパスワード以外の値を受け取れるようにする。

  • Devise では、メールアドレスとパスワードしか値を受け取らないようにストロングパラメータが記述されているので、任意でフォームを追加した場合には、その値を受け取れるように記述する必要がある。
_controller.rb
class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  protected
  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:追加したフォームの名前])
  end
end

ログインしている時としていない時で表示が変わるようにする。

  • Devise をインストールすると、ユーザーがサインインしているかどうかを判断する user_signed_in? メソッドが使用できる。
<% if user_signed_in? %>
  <!-- ユーザーがサインインしている場合に実行する処理を記述する。 -->
<% else %>
  <!-- ユーザーがサインアウトしている場合に実行する処理を記述する。 -->
<% end %>

送信したフォームの情報にサインインしているユーザーの情報を追加したい場合…

_controller.rb
class PostsController < ApplicationController
  private
  def post_params
    params.require(:post).permit(:title, :content).merge(user_id: current_user.id)
      # form_with を使用して送信される情報を取得するストロングパラメータに .merge メソッドを使用して、current_user (現在ログインしているユーザー) の ID を結合させる。
  end
end