我们正在使用 Ruby on Rails 4. 我的“事件”模型有: “标题”字段,可以是任意字符串 一个convention_id字段,它是Convention表的索引 状态字段,可以是“建议”,“讨论”,“已接受”,“已拒绝
我的“事件”模型有:
>“标题”字段,可以是任意字符串
>一个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
我认为这正是我想要的.
再次感谢您的帮助.