ruby-on-rails - rails : validates_uniqueness_of with conditions not working as expected

标签 ruby-on-rails validation activerecord

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

class Foo < ActiveRecord::Base

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

end

最佳答案

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

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/

相关文章:

ruby-on-rails - 无方法错误 : undefined method `email' for nil:NilClass (Rspec/factory girl/cancan/devise)

javascript - 使用 jquery 设置 date_select

validation - 使用 Hibernate Validator (JSR 303) 进行跨领域验证

ruby-on-rails - ActiveRecord 模型实例上的陈旧关联数据?

ruby-on-rails - 命名空间模型的 ActiveModel::UnknownAttributeError

javascript - 将本地json文件添加到rails app,使用$.getJSON在本地获取

css - 2 种不同的 DataAnnotation 验证样式与 css

java - @ValidateOnExecution 什么时候应该与 Jersey 一起使用?

mysql - 如果数组为空,where_in codeigniter 错误

ruby-on-rails - ActiveAdmin 错误 : no superclass method `buttons'