我想在唯一性验证中添加一个地方。
这样是错误的:
validates :identifier_number, uniqueness: true, if: :is_active?
仅在我要验证的记录处于活动状态时进行验证。
我想“这样”:
validates :identifier_number, uniqueness: proc { where is_active: true }
验证每个记录,无论是否处于活动状态,但仅针对“活动”记录。因此,两个不活动的记录可以具有相同的identifier_number,但是任何记录都不能与任何活动的记录具有相同的indentifier_number。
答案 0 :(得分:3)
您可以使用以下方法做到这一点:
validates_uniqueness_of :identifier_number, conditions: -> { where(is_active: true) }
为此的API基座:https://apidock.com/rails/ActiveRecord/Validations/ClassMethods/validates_uniqueness_of
答案 1 :(得分:0)
您可以通过以下方式完成
validates :identifier_number, uniqueness: true, if: :is_active?
def is_active?
is_active
end
OR
validates :identifier_number, uniqueness: true,
if: Proc.new { |a| a.is_active }
rails指南非常清楚地说明了这一点(https://guides.rubyonrails.org/active_record_validations.html)。
希望这对您有帮助!