微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.jb51.cc/ruby/272655.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐