2016-01-07 2 views
0

Я пытаюсь добавить проверку validates_unique с использованием драгоценного камня Sequel и базы данных MySQL.Последовательная уникальная проверка для нескольких столбцов

Я хотел бы, чтобы это не пройти валидацию, если значение 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 

Я борется с отображением его на проверку сиквела. Любые рекомендации приветствуются.

ответ

0

Добавление 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 
0

Индекс column3 и просто запросите таблицу для любого значения из столбца2, с которым вы проверяете. Если ваш запрос создает запись, ваша проверка должна завершиться неудачей.

Смежные вопросы