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

ruby-on-rails – Rails:验证忽略某些记录的唯一性

发布时间:2020-12-17 01:31:48 所属栏目:百科 来源:网络整理
导读:我们正在使用 Ruby on Rails 4. 我的“事件”模型有: “标题”字段,可以是任意字符串 一个convention_id字段,它是Convention表的索引 状态字段,可以是“建议”,“讨论”,“已接受”,“已拒绝”或“已丢弃”. 我想创建一个validates语句,确保标题在约定中是
我们正在使用 Ruby on Rails 4.

我的“事件”模型有:

>“标题”字段,可以是任意字符串
>一个convention_id字段,它是Convention表的索引
>状态字段,可以是“建议”,“讨论”,“已接受”,“已拒绝”或“已丢弃”.

我想创建一个validates语句,确保标题在约定中是唯一的.这很容易.

validates :title,:uniqueness => { :scope => :convention_id }

做我想要的大部分.但我想忽略任何状态为“已拒绝”或“已删除”的记录.我真正想要的是向SQL RAILs添加一些WHERE子句,但我不确定如何.

谢谢你的帮助.

解决方法

我找到了答案.以下似乎按预期工作:

validates_uniqueness_of :title,scope: :convention,conditions: -> { where.not(status: ['Dropped','Rejected']) }

生成的SQL是

SELECT 1 AS one FROM "events"
  WHERE ("events"."title" = 'Panel' AND 
         "events"."id" != 2 AND 
         "events"."convention_id" = 1) AND
        ("events"."status" NOT IN ('Dropped','Rejected'))
  LIMIT 1

我认为这正是我想要的.

再次感谢您的帮助.

(编辑:李大同)

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

    推荐文章
      热点阅读