【问题标题】:Validate uniqueness of two filed but avoid if second one is null验证两个字段的唯一性,但如果第二个字段为空则避免
【发布时间】:2011-04-25 11:50:38
【问题描述】:

我想验证两个字段的唯一性,但如果第二个字段为零,则忽略验证 我有两个模型 “资产”和“公司” 资产有一个唯一的标识符代码我想做的是与公司验证资产标识符代码的唯一性。 我们可以通过

来检查
class Asset < ActiveRecord::Base
  validates :identifier, :uniqueness => {:scope => :company_id} 
end

但这也不允许两个资产为零

如果标识符代码为 nil,我如何忽略对唯一性的验证

我们可以传递一个块,或添加except 或类似的东西,我们可以在控制器中使用过滤器我正在寻找一些解决方案,如

验证 :identifier, :uniqueness => {:scope => :company_id} 除非 { :identifier.is_nil? }

我可以通过一些验证前回调跳过验证吗??

【问题讨论】:

    标签: validation ruby-on-rails-3


    【解决方案1】:

    Ruby 1.8.7

    validates :identifier, :uniqueness => { :scope => :company_id } , :unless => lambda { |asset| !asset.identifier.nil? }
    

    Ruby 1.9.3

       validates :identifier, :uniqueness: { scope: :company_id }, unless: lambda { |asset| !asset.identifier.nil? }
    

    【讨论】:

      【解决方案2】:

      这在 Rails 4.0.1 中对我有用:

      validates_uniqueness_of  :identifier, :scope => :company_id, :allow_blank => true
      

      我可以使用空白标识符创建对象,但无法在同一个公司内创建两个具有相同标识符的对象。

      PS:我知道这是很久以前发布的,但是这种方式看起来也不错。这是 Link 到我找到答案的类似后验问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-10
        • 2010-12-10
        • 2017-06-07
        • 2015-12-07
        • 1970-01-01
        • 2022-01-17
        • 2020-12-23
        • 1970-01-01
        相关资源
        最近更新 更多