如何添加位置以验证唯一性

时间:2019-04-12 07:12:39

标签: ruby-on-rails validation activerecord

我想在唯一性验证中添加一个地方。

这样是错误的:

validates :identifier_number, uniqueness: true, if: :is_active?

仅在我要验证的记录处于活动状态时进行验证。

我想“这样”:

validates :identifier_number, uniqueness: proc { where is_active: true }

验证每个记录,无论是否处于活动状态,但仅针对“活动”记录。因此,两个不活动的记录可以具有相同的identifier_number,但是任何记录都不能与任何活动的记录具有相同的indentifier_number。

2 个答案:

答案 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)。

希望这对您有帮助!