2012-06-11 3 views
11

У меня есть эти строки/текстовые поля в моей базы данных миграции файла:Rails Проверка ActiveRecord: максимальная длина строки?

t.string :author 
    t.string :title 
    t.string :summary 
    t.text :content 
    t.string :link 

И вот мои вопросы:

  1. Каждый атрибут строка/текст должен иметь максимальную валидацию длины для обеих целей, безопасность (если вы не хотите получать несколько МБ ввода текста) и базы данных (если строка = varchar, у mysql ограничение 255 символов). Правильно это или нет причины не иметь проверки максимальной длины для всего атрибута строки/текста в базе данных?
  2. Если меня не интересуют точные длины автора и названия как долго, так как они не слишком длинны для хранения в виде строк, я должен установить максимальную длину до 255 для каждого из них?
  3. Если максимальная длина URL-адреса составляет около 2000 символов, безопасно ли хранить ссылки как строки, а не как тексты? Должен ли я проверять максимальную длину атрибута ссылки, если я уже проверяю его формат с помощью regexp?
  4. Если атрибут content (text) имеет максимальную длину только для защиты базы данных от ввода неограниченной длины? Например, устанавливает максимальную длину текстового поля в 100 000 символов, или это совершенно бессмысленно и неэффективно?

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

ответ

5

Вопрос велик, и, возможно, люди с большим количеством знаний о рельсах/внутренностях mysql смогут расширить свое присутствие.

1) Наличие какой-либо проверки в модели зависит от того, где вы хотите, чтобы произошел сбой, если он превышает лимит. Модель является лучшим вариантом, поскольку, скорее всего, она будет охватывать большинство объектов с использованием модели. Другой альтернативой является просто ограничение полей формы с использованием атрибута maxlength.

Первый вариант не работает для дополнительных полей.

2) Я не знаю ни одного эмпирического правила. Используйте то, что вы знаете, самое длинное и сделайте его немного больше.

3) Мое правило заключается в том, что все, что указано выше 255, является текстом. Вы можете получить дополнительную информацию об этом Here

4) Если столбец содержит одно и то же содержимое, в этом может быть значение. В некоторых случаях использования может быть разная максимальная длина в зависимости от типа контента или пользователя.

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

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