Rails:validates_uniqueness_of 条件未按预期工作

Lyn*_*ynn 3 validation activerecord ruby-on-rails

我有一个模型,它使用“活动”标志来软删除项目而不是销毁它们。该模型具有“名称”属性,该属性在活动项中必须是唯一的。我试图将conditions修饰符与 一起使用validates_uniqueness_of,但它似乎仍在检查活动和非活动项目的唯一性。我究竟做错了什么?

class Foo < ActiveRecord::Base

  attr_accessible :name, :active
  validates_uniqueness_of :name, conditions: -> { where(active:true) }

end
Run Code Online (Sandbox Code Playgroud)

Mat*_*att 5

您可以为此结合使用scopeif修饰符:

scope :active, where(:active => true)
validates :name, :uniqueness => {:message => 'That name is in use', :if => :active?, :scope => :active}
Run Code Online (Sandbox Code Playgroud)

这将导致仅活动的项目触发验证,并且验证将仅考虑活动项目之间的唯一性。

我已经确认这适用于 Rails 3 和 4。