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) Если столбец содержит одно и то же содержимое, в этом может быть значение. В некоторых случаях использования может быть разная максимальная длина в зависимости от типа контента или пользователя.

Все вышеизложенное также зависит от того, как строгие требования к проверке данных находятся в проекте.