はじめに
前回までで、Rails7でサンプルアプリケーションのログイン機能をDeviseを用いて作成してきました。
今回は、ログイン機能を実装の続きを進めていきます。
前回に続きDockerを使用した環境で進めていきます。
前回までの内容は以下をご参考ください。
今回の流れ
- マイグレーションファイルの作成
- 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が更新されていることも確認しておきましょう。
バリデーションの追加
バリデーションを追加して、ユーザー登録時に入力された値が正しいか確認するようにします。
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を追加してバリデーションの設定も行いました。
次回は、ページを整えていきましょう!
コメント