Rails чувствительные к регистру приложения с Postgres - PullRequest
3 голосов
/ 15 ноября 2010

Я запускаю новое приложение Rails на Postgresql и не понимаю, почему на Земле они сделали Postgreql чувствительным к регистру и даже не сделали возможность отключить это.

Я имею в виду, действительно,если кто-то зарегистрируется как «Сэм» на моем сайте, не сможет войти в систему как «Сэм», но могут быть две разные учетные записи «Сэм» и «Сэм».Это катастрофа, особенно принимая во внимание тот факт, что все другие основные базы данных не чувствительны к регистру.

Теперь вместо того, чтобы искать такого пользователя, как

User.find_by_name(params[:name])

IЯ должен сделать это

User.all(:conditions=>["name ILIKE ?", params[:name]]).first

Я не могу поверить, что в Rails нет способа избежать этого, потому что это разрушает один из основных принципов фреймворка: независимость от базы данных.

IsЕсть ли лучший способ реализовать без учета регистра имя пользователя / схема электронной почты?

Ответы [ 3 ]

3 голосов
/ 16 ноября 2010

Существует модуль contrib под названием citext, который создает нечувствительный к регистру тип текста. Я думаю, что он включен только по умолчанию, начиная с 9.0.

Кроме того, вы можете легко создать уникальный индекс, чтобы предотвратить одновременное использование учетной записи sam, Sam и SAM:

создать таблицу abc (текст пользователя); создать уникальный индекс abc_users_ci для abc (upper (users)); вставить в значения abc ('sam'); вставить в ABC значения («Сэм»); ОШИБКА: двойное значение ключа нарушает уникальное ограничение "abc_users_ci"

тада! Или вы можете просто жаловаться, что pgsql не похож на mysql.

1 голос
/ 15 ноября 2010

особенно с учетом того факта, что все другие основные базы данных нечувствительны к регистру

Это просто неправда.Oracle, DB2 и Firebird по умолчанию чувствительны к регистру

Но я согласен, что наличие такой опции иногда делает вещи немного проще.

1 голос
/ 15 ноября 2010

Полагаю, у вас может быть два столбца БД, , если важно сохранить регистр:

  • Один для имени входа, который вы всегда будете преобразовывать в нижний регистр при регистрации пользователя, и который вы используете для входа в систему пользователя после преобразования имени из формы входа в нижний регистр
  • Один для отображаемого имени, которое отображается как имя пользователя и именно то, что пользователь дал вам при регистрации
...