Rails validates_uniqueness_of для нескольких столбцов с нечувствительностью к регистру

У меня есть модель с двумя полями, которые я назову first_name и last_name, и я хочу убедиться, что комбинация этих двух полей уникальна без учета регистра. Я получил полпути, используя это:

validates_uniqueness_of :first_name, :scope => :last_name

Проблема в том, что проверка уникальности кажется чувствительной к регистру, хотя документация говорит, что по умолчанию он должен быть нечувствительным к регистру. Итак, учитывая существующую запись:

{ :first_name => 'John', :last_name => 'Smith' }

Это будет разрешено:

{ :first_name => 'JOHN', :last_name => 'SMITH' }

А также любую дополнительную запись, в которой есть какие-либо варианты регистра имени или фамилии. Почему разрешены эти записи? Как я могу обеспечить уникальность без учета регистра для обоих полей вместе?


person Jimmy    schedule 06.02.2010    source источник


Ответы (1)


Вы пробовали validates_uniqueness_of :first_name, :scope => :last_name, :case_sensitive => false?

В документации говорится, что это правда по умолчанию.

(Я думаю, что ссылка, которую вы дали, относится к какой-то устаревшей документации. IIRC, значение по умолчанию для этого изменилось за последние пару лет.)

person Luke Francl    schedule 06.02.2010
comment
Ты прав! Я был введен в заблуждение документацией, которую я нашел. Установка :case_sensitive => false заставила его работать для first_name, но не работает в другом направлении. Он по-прежнему будет принимать { :first_name => 'John', :last_name => 'SMITH' }. Есть ли способ заставить его работать в двух направлениях? Могу ли я просто включить два правила validates_uniqueness_of с переставленным полем? - person Jimmy; 07.02.2010
comment
Я попытался добавить еще одну проверку, поменяв местами два поля. Теперь он будет обнаруживать случаи, когда одно из полей имеет другой регистр, но не оба, так что это все еще проходит: { :first_name => 'JOHN', :last_name => 'SMITH' }. - person Jimmy; 07.02.2010
comment
На вашем месте я бы просто написал собственный метод проверки. - person Luke Francl; 07.02.2010
comment
Да, это то, что я в итоге сделал. Спасибо всем. - person Jimmy; 07.02.2010
comment
Вы должны поделиться своим собственным методом проверки, чтобы другие могли его изучить. :) - person Matt Huggins; 05.05.2011
comment