Просто передайте Proc
, который возвращает true или false, для опции :if
или :unless
:
validates_uniqueness_of :a, :scope => [:b, :c], :unless => Proc.new { |obj| !obj.d.nil? }
validates_uniqueness_of :a, :scope => [:b, :c], :if => Proc.new { |obj| obj.d.nil? }
(Это предполагает, что d
является свойством или методом вашей модели.)
Конечно, это не идеальная гарантия уникальности.По умолчанию существует условие гонки, которое может разрешить дублирование.См. документацию для получения дополнительной информации.