加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 20:06:21 所属栏目:百科 来源:网络整理
导读:我有一个带有活动列的模型,它是一个布尔值.我想要验证所有新添加的记录对于company_id的唯一性,这样我可以添加尽可能多的记录,只要活动设置为false,就可以将相同的company_id添加到表中.每个company_id只能有一个活动记录. 我该怎么写?我已经尝试过: valid
我有一个带有活动列的模型,它是一个布尔值.我想要验证所有新添加的记录对于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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读