ruby-on-rails-3 – Rails 3验证一个值与列的唯一性?

我有一个带有活动列的模型,它是一个布尔值.我想要验证所有新添加的记录对于company_id的唯一性,这样我可以添加尽可能多的记录,只要活动设置为false,就可以将相同的company_id添加到表中.每个company_id只能有一个活动记录.

我该怎么写?我已经尝试过:

validates :company_id,:uniqueness => { :scope => :active }

但是,这似乎也验证了主动是假的唯一组合(这样我的表中的永远不能有两个以上的company_id在相同的活动状态,无论活动是什么) – 上面的验证允许两个记录为company_id,一个为active = false,另一个为active = true.一旦这两个记录进入,验证将阻止其他所有内容.

然后我尝试添加

scope :active,where(:active => true)

但是,似乎并没有改变验证(与上述相同的问题).

如何写这个验证,以便只要active为false,并且只允许一个active = true每个company_id,我可以添加具有相同company_id的多个记录?

解决方法

不需要使用validates_each – 只有当您想要通过同一个块传递多个属性时.只需创建自定义验证:
validate :company_id_when_active

def company_id_when_active
  if active? and CompanyTerm.exists? ["company_id = ? AND active = 1 AND id != ?",company_id,id.to_i]
    errors.add( :company_id,'already has an active term')
  end
end

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...