我有一个模型使用“事件”标志来软删除项目而不是销毁它们。该模型具有“名称”属性,该属性在事件项目中必须是唯一的。我试图将 conditions
修饰符与 validates_uniqueness_of
一起使用,但它似乎仍在检查事件和非事件项目的唯一性。我做错了什么?
class Foo < ActiveRecord::Base
attr_accessible :name, :active
validates_uniqueness_of :name, conditions: -> { where(active:true) }
end
最佳答案
您可以结合使用 scope
和 if
修饰符:
scope :active, where(:active => true)
validates :name, :uniqueness => {:message => 'That name is in use', :if => :active?, :scope => :active}
这将导致只有处于事件状态的项目才会触发验证,并且验证将仅考虑处于事件状态的项目之间的唯一性。
我已经确认这在 Rails 3 和 4 中有效。
关于ruby-on-rails - rails : validates_uniqueness_of with conditions not working as expected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18102873/