【Ruby on Rails7】ログイン機能にカラムを追加【Devise/Docker】

DB

はじめに

前回までで、Rails7でサンプルアプリケーションのログイン機能をDeviseを用いて作成してきました。

今回は、ログイン機能を実装の続きを進めていきます。

前回に続きDockerを使用した環境で進めていきます。

前回までの内容は以下をご参考ください。

今回の流れ

  1. マイグレーションファイルの作成
  2. notnull制約の追加
  3. マイグレーションファイルの実行
  4. バリデーションの追加
  5. ストロングパラメータの設定

マイグレーションファイルの作成

前回作成したUserテーブルはDeviseのデフォルトでemailとPWのカラムしかございませんので、nameを追加していきます。

% docker exec -it myapp-web rails g migration AddNameToUser name:string
      invoke  active_record
      create    db/migrate/20241201151519_add_name_to_user.rb

notnull制約の追加

https://railsguides.jp/active_record_migrations.html#修飾子を渡す

作成されたmigrationファイルを開き、以下のように修正します。

db/migrate/20241201151519_add_name_to_user.rb

class AddNameToUser < ActiveRecord::Migration[7.0]
  def change
    add_column :users, :name, :string, null: false
  end
end

マイグレーションファイルの実行

マイグレーションファイルを実行して変更を反映します。

% docker exec -it myapp-web rails db:migrate              
== 20241201151519 AddNameToUser: migrating ====================================
-- add_column(:users, :name, :string, {:null=>false})
   -> 0.0024s
== 20241201151519 AddNameToUser: migrated (0.0024s) ===========================

db/schema.rbが更新されていることも確認しておきましょう。

バリデーションの追加

バリデーションを追加して、ユーザー登録時に入力された値が正しいか確認するようにします。

Active Record バリデーション - Railsガイド
Active Recordのバリデーション機能について解説します。

以下の通り、更新してpresence: trueを入れることでnameに値が入っているか確認します。

app/models/user.rb

class User < ApplicationRecord
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable
  validates :name, presence: true
end

ストロングパラメータの設定

許可されていないパラメータの使用を禁止するためにストロングパラメータを設定します。

Action Controller の概要 - Railsガイド
本ガイドでは、コントローラの動作と、アプリケーションのリクエストサイクルでコントローラがどのように使われるかについて説明します。セッション、フィルタ、cookie、データストリーミング、リクエストによって発生する例外、その他多くの話題を取り...
GitHub - heartcombo/devise: Flexible authentication solution for Rails with Warden.
Flexible authentication solution for Rails with Warden. - heartcombo/devise

以下のファイルを更新します。

app/controllers/application_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: [:name])
  end
end

まとめ

今回は、ログイン機能にnameを追加してバリデーションの設定も行いました。

次回は、ページを整えていきましょう!

コメント

タイトルとURLをコピーしました