跨多个列的续集唯一验证

时间:2016-01-07 20:50:17

标签: mysql ruby validation sequel sequel-gem

我尝试使用Sequel gem和MySQL数据库添加validates_unique验证。

如果column2的值与column3中的现有值匹配,我希望验证失败,因此类似以下(非工作)示例:

validates_unique(:email_address){|ds| ds.where('unconfirmed_email NOT LIKE confirmed_email')}

这是sqlfiddle,我已将此查询用于所需结果:

SELECT DISTINCT value
FROM (
  SELECT DISTINCT confirmed_email AS value FROM email_addresses
  UNION SELECT DISTINCT unconfirmed_email AS value FROM email_addresses
) AS derived

我正在努力将其映射到续集验证。任何指导都表示赞赏。

2 个答案:

答案 0 :(得分:1)

添加custom validation代替stdtQ.add(new Student(sc.hasNext(), sc.nextInt())); 解决了这个问题。

validates_unique

私人方法

errors.add(:unconfirmed_email, 'email in use') if email_in_use?(unconfirmed_email)

答案 1 :(得分:0)

索引column3并只查询您的表,以查找您要验证的column2中的任何值。如果您的查询生成记录,那么您的验证将失败。