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

前端之家收集整理的这篇文章主要介绍了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
原文链接:https://www.f2er.com/ruby/272655.html

猜你在找的Ruby相关文章