条件付きバリデーションの実装
条件付きバリデーションの実装
特定の条件下でバリデーションを有効にしたいときの実装方法。
validation
保存・更新しようとしているデータが妥当であるか判断する。 妥当でなければ保存・更新しない。
uniqueness: true
ユニークであること。(他に同じ値のレコードが存在しないこと。)
実装例
グループの中に同じユーザー名の人がいた場合に、uniqueness: true
のバリデーションを実行したい場合の実装例。
# app/models/user.rb
# frozen_string_literal: true
# == Schema Information
#
# Table name: users
#
# id :integer not null, primary key
# group_id :integer not null
# name :string(255) not null
class User < Application_record
belongs_to :group
validates :name, uniqueness: true, if: :presence_name?
...
def presence_name?
# 同じ Group の中に同じユーザー名の人がいるか?
User.where.not(id: id).where(group: group).pluck(:name).include?(name)
end
end