Sequel 跨多列的唯一验证

Sequel unique validation across multiple columns

我正在尝试使用 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

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

索引 column3 并查询您的 table 以获取您要验证的 column2 中的任何值。如果您的查询产生一条记录,那么您的验证应该会失败。

添加 custom validation 而不是 validates_unique 解决了问题。

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

还有一个私有方法

def email_in_use?(email)
  EmailAddress.where(confirmed_email: email).first ? true : false
end