validates_uniqueness_of 的条件验证消息

Conditional validation message for validates_uniqueness_of

我有以下验证:

class User < ActiveRecord::Base
...
  validates :email, uniqueness: { message: "Email already associated with an account" }
...
end

我的 class User 作为一个名为 active 的布尔属性,我想使用条件将其合并到验证逻辑中。如果条件 user.active? == false,抛出自定义验证错误消息的最佳方法是什么?

我会尝试添加以下两个验证:

validates :email, uniqueness: { message: "message 1", if: 'active?' } validates :email, uniqueness: { message: "message 2", if: '!active?' }

验证可以表示为实例方法。例如,我有一个具有 first_namelast_name 属性的 Student 模型。我想引入一个验证,当其中一个或两个名称为空时,它将抛出自定义错误。我可以通过以下方式做到这一点:

调用validate中的自定义方法:

class Student < ActiveRecord::Base
...
  validate :full_name_validation, on: :create
...
end

并添加我的 full_name_validation 方法:

  def full_name_validation
    if first_name.blank? && last_name.blank?
      errors.add(:full_name, 'Full name is required')
    elsif first_name.blank?
      errors.add(:full_name, 'First name is required')
    else
      errors.add(:full_name, 'Last name is required')
    end
  end