0

Я работаю над проектом RoR, где у меня есть модель со строковым атрибутом, который должен быть абсолютно нечувствительным к регистру. Мне просто интересно, что лучший способ сделать это.Каков наилучший способ сделать регистр столбца db нечувствительным в Rails?

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

Есть ли способ сделать это на уровне БД? Я использую postgres. Если нет, то как лучше всего подойти к этой проблеме? Действительно ли база данных сильно пострадала при поиске нечувствительности к регистру? Как насчет перспективы безопасности? Безопаснее ли каждый раз проверять регистр без учета регистра, чтобы предотвратить проблемы, если кто-то создал строчную строку? В основном, что лучше всего подходит для этого?

ответ

1

Столбец db никогда не учитывает регистр. Ваше взаимодействие может быть нечувствительным к регистру. Как вы видели, существует несколько возможных случаев и решений.

Если атрибут имеет смысл только в случае, но вы хотите разрешить поиск независимо от случая, тогда всегда нормализуйте его в случае, когда записываете в базу данных и фильтруете запросы, которые к нему доступны. Типичным примером является адрес электронной почты. Вы хотите сохранить его всегда в нижнем регистре и обязательно запросить его таким образом, уменьшив случай ввода данных пользователя.

И наоборот, если в поле вы хотите сохранить так важно (например, название или бренд), но вы хотите, чтобы регистрозависимости взаимодействие, у вас есть два основных варианта

  1. Добавить отдельный поле, которое содержит атрибут, всегда нечувствительно к регистру и действует как в предыдущем примере.
  2. Используйте функции ядра базы данных при запросе базы данных, чтобы преобразовать значение во время выполнения. Имейте в виду, что это, вероятно, предотвратит возможность использования базы данных индексами, что может привести к ухудшению производительности.
+0

Мне вообще не нужно сохранять корпус. –

+1

Итак, следуйте первому решению, в котором вы конвертируете все входы в один случай (нижний или верхний). –

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