验证两个字段的唯一性,但避免第二个字段为空

Nav*_*eed 7 validation ruby-on-rails-3

我想验证两个字段的唯一性,但如果第二个字段为零只是忽略验证我有两个模型'资产'和'公司'资产有一个唯一的标识符代码我想要做的是验证资产的标识符代码的唯一性与公司.我们可以检查一下

class Asset < ActiveRecord::Base
  validates :identifier, :uniqueness => {:scope => :company_id} 
end
Run Code Online (Sandbox Code Playgroud)

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

如果没有,我怎么能忽略标识符代码唯一性的验证

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

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

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

Nav*_*eed 10

Ruby 1.8.7

validates :identifier, :uniqueness => { :scope => :company_id } , :unless => lambda { |asset| !asset.identifier.nil? }
Run Code Online (Sandbox Code Playgroud)

Ruby 1.9.3

   validates :identifier, :uniqueness: { scope: :company_id }, unless: lambda { |asset| !asset.identifier.nil? }
Run Code Online (Sandbox Code Playgroud)