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