【Ruby on Rails7】ログイン機能にカラムを追加【Devise/Docker】
- #rails
- #devise
- #docker
- #migration
はじめに
前回までで、Rails7でサンプルアプリケーションのログイン機能をDeviseを用いて作成してきました。
今回は、ログイン機能を実装の続きを進めていきます。
前回に続きDockerを使用した環境で進めていきます。
前回までの内容は以下をご参考ください。
Rails 7 環境構築(jesuke.com) Rails 7 トップページ(jesuke.com) Rails 7 ログイン機能(jesuke.com)
今回の流れ
- マイグレーションファイルの作成
- notnull制約の追加
- マイグレーションファイルの実行
- バリデーションの追加
- ストロングパラメータの設定
マイグレーションファイルの作成
前回作成した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が更新されていることも確認しておきましょう。
バリデーションの追加
バリデーションを追加して、ユーザー登録時に入力された値が正しいか確認するようにします。
https://railsguides.jp/v7.0/active_record_validations.html
以下の通り、更新してpresence: trueを入れることでnameに値が入っているか確認します。
app/models/user.rb
class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
validates :name, presence: true
end
ストロングパラメータの設定
許可されていないパラメータの使用を禁止するためにストロングパラメータを設定します。
https://railsguides.jp/action_controller_overview.html#strong-parameters
https://github.com/heartcombo/devise#strong-parameters
以下のファイルを更新します。
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を追加してバリデーションの設定も行いました。
次回は、ページを整えていきましょう!