0

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

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

4

2 回答 2

1

添加自定义验证而不是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
于 2016-01-07T23:10:12.253 回答
0

索引 column3 并在您的表中查询您正在验证的 column2 中的任何值。如果您的查询产生了一条记录,那么您的验证应该会失败。

于 2016-01-07T21:11:17.297 回答