hene

hene.dev

条件付きバリデーションの実装

条件付きバリデーションの実装

特定の条件下でバリデーションを有効にしたいときの実装方法。

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

参考

関連記事