Должен ли я проверить тип столбца? (Рельсы, СТИ) - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть модель, и я использую Наследование одной таблицы . В моей базе данных есть столбец type, который заполняется строкой имени класса.

Должен ли я проверить этот столбец?

Параметры:

  • обязательный столбец в БД
  • validates :type, presence: true
  • validates :type, inclusion: {in: [Class1.to_s, Class2.to_s]}

Ответы [ 2 ]

2 голосов
/ 12 апреля 2020

Поскольку ActiveRecord обрабатывает поле type, вам не нужно писать дополнительные проверки для этого поля.

1 голос
/ 13 апреля 2020

Я согласен, что ни одна из этих проверок не требуется.

Просто для уточнения, валидации обрабатывают вводимые человеком данные из формы. Они существуют для решения одной конкретной проблемы c, и это гарантирует, что вводимые пользователем данные соответствуют приемлемому формату.

  • нет необходимости проверять наличие любого столбца в базе данных, если эта таблица создана вашим приложением Rails. Миграции помещают это туда, и если люди отбрасывают столбцы из вашей базы данных, у вас есть большие проблемы, чем проверка пользовательского ввода.
  • нет необходимости проверять наличие поля типа, если оно пустое, оно будет автоматически населенный экземпляром класса. Например, Parent.new заполнит его «Родителем»
  • . Может быть какое-то значение для проверки правильности включения, но было бы очень редко, чтобы можно было ввести неверный тип. Если ваш пользователь должен ввести имя класса в форму, в игре есть очень сомнительный дизайн формы. Вместо этого воспользуйтесь одним из этих двух подходов:
    • Выбор, содержащий допустимые типы.
    • Отдельные контроллеры для каждого дочернего типа. В конце концов, если они значительно отличаются, вы, вероятно, захотите, чтобы их формы, страницы показа и страницы указателя выглядели по-разному. И если они существенно не отличаются, вы, вероятно, не хотите использовать наследование одной таблицы.

(При любом из этих подходов нет необходимости проверять столбец типа)

Надеюсь, это поможет:)

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