【问题标题】:How to add a where in validates uniqueness如何添加验证唯一性的位置
【发布时间】:2019-04-12 07:12:38
【问题描述】:

我想在唯一性验证上添加一个位置。

这样就错了:

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

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

我想要“这样的东西”:

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

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

【问题讨论】:

  • 我认为您需要稍微澄清一下您的问题。您只想针对活动的记录进行验证。我知道它写在那里,但也许你需要添加一个例子来澄清。
  • 我将您的问题编辑得更清楚一些并添加了答案,希望我理解正确。

标签: ruby-on-rails validation activerecord


【解决方案1】:

您可以通过以下方式做到这一点:

validates_uniqueness_of :identifier_number, conditions: -> { where(is_active: true) }

API 码头:https://apidock.com/rails/ActiveRecord/Validations/ClassMethods/validates_uniqueness_of

【讨论】:

    【解决方案2】:

    你可以通过以下方式做到这一点

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

     validates :identifier_number, uniqueness: true,
       if: Proc.new { |a| a.is_active }
    

    rails 指南解释得很清楚(https://guides.rubyonrails.org/active_record_validations.html)。

    希望对你有帮助!

    【讨论】:

    • 不,我想一直检查,但 is_active=true。这只检查何时 is_active?。但是,无论如何,谢谢。
    猜你喜欢
    • 2022-10-01
    • 2023-03-05
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多