Rails Проверка ActiveRecord: максимальная длина строки?
У меня есть эти строковые/текстовые поля в файле миграции базы данных:
t.string :author
t.string :title
t.string :summary
t.text :content
t.string :link
И это мои вопросы:
- Каждый атрибут string/text должен иметь максимальную проверку длины для обеих целей, безопасность (если вы не хотите получать несколько МБ текстового ввода) и базу данных (если string = varchar, mysql имеет ограничение на 255 символов), Правильно ли это или нет каких-либо причин не иметь проверки максимальной длины для всего атрибута строки/текста в базе данных?
- Если меня не интересует точная длина автора и названия как долго, так как они не слишком длинны для хранения в виде строк, я должен установить максимальную длину до 255 для каждого из них?
- Если максимальная длина URL-адреса составляет около 2000 символов, безопасно ли хранить ссылки как строки, а не как тексты? Должен ли я проверять максимальную длину атрибута ссылки, если я уже проверяю его формат с помощью regexp?
- Если атрибут content (text) имеет максимальную длину только для защиты базы данных от ввода неограниченной длины? Например, задается максимальная длина текстового поля до 100 000 символов, или это совершенно бессмысленно и неэффективно?
Я понимаю, что эти вопросы могут показаться неважными для некоторых людей, но все же - это проверка ввода, которая требуется для любого приложения, - и я считаю, что здесь стоит быть довольно параноидальным.
Ответы
Ответ 1
Вопрос велик, и, возможно, люди с большим количеством знаний об основах rails/mysql смогут больше расширять.
1) Наличие какой-либо проверки в модели зависит от того, где вы хотите, чтобы произошел сбой, если он превышает лимит. Модель является лучшим вариантом, поскольку, скорее всего, она будет охватывать большинство объектов с использованием модели.
Другой альтернативой является просто ограничение полей формы с использованием атрибута maxlength.
Первый параметр не работает для необязательных полей.
2) Я не знаю ни одного эмпирического правила. Используйте то, что вы знаете, самое длинное и сделайте его немного больше.
3) Мое правило состоит в том, что все, что указано выше 255, является текстом. Вы можете найти дополнительную информацию об этом здесь
4) Если столбец содержит одно и то же содержимое, в этом может быть значение. В некоторых случаях использования может быть разная максимальная длина в зависимости от типа контента или пользователя.
Все вышеизложенное также зависит от того, как строгие требования к проверке данных находятся в проекте.