validates_uniqueness_of ...除非

时间:2010-07-01 03:19:10

标签: ruby-on-rails validation

写作的正确方法是什么?

validates_uniqueness_of :a, :scope => [:b, :c], :unless => !d.nil?

2 个答案:

答案 0 :(得分:2)

只需将Proc传递给:if:unless选项,返回true或false:

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是您模型的属性或方法。)

当然,这不是唯一性的完美保证。默认情况下,存在可能允许重复的竞争条件。有关详细信息,请参阅documentation

答案 1 :(得分:2)

非常简单:

validates_uniqueness_of :a, :scope => [:b, :c], :unless => :d