Rails - валидация только для данных из пользовательского ввода через формы? - PullRequest
2 голосов
/ 09 января 2010

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

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

Ответы [ 5 ]

4 голосов
/ 09 января 2010

Наряду с необходимостью подтверждения пользовательского ввода, проверки Active Record также предоставляют полезный DSL для указания цели, стоящей за дизайном вашего домена.

2 голосов
/ 10 января 2010

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

Хорошей практикой является наличие явных ограничений на все атрибуты класса модели, независимо от того, соответствуют они полям базы данных или нет. Довольно часто данные из вашей модели будут влиять на поведение вашего контроллера и визуализацию ваших представлений, и будет позором (и, возможно, исключением), если доступные данные по какой-то причине не попадают в ограничение.

Конечно, вы должны протестировать все эти функции проверки как часть тестирования вашей системы.

Тот факт, что вы беспокоитесь о «хитрых» значениях, подсказывает мне, что ваши данные не нормализованы должным образом. Я предлагаю вам ознакомиться с различными нормальными формами и попытаться преобразовать свои схемы данных как минимум в третью нормальную форму. Это должно помочь вам избавиться от возможности иметь «хитрые» атрибуты модели.

2 голосов
/ 09 января 2010

По отношению к ActiveRecord. Любой атрибут, имеющий соответствующий столбец в базе данных ( и в конечном итоге использовавшийся для заполнения этого столбца ) и требующий определенного уровня непрерывности / целостности, должен быть проверен.

Пример: если для атрибута требуются данные, которые он принимает, он находится в диапазоне от 1..10, то вы, вероятно, захотите проверить, соответствует ли набор данных для этого атрибута этим требованиям.

Вы должны всегда проверять, ну, обычно. Но если код вашего собственного дизайна, вы должны проверить его.

-

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

Если вы выполните санитарную обработку ABCD, чтобы она не содержала <script>, но столбец вашей базы данных принимает только целые числа, ABCD не совсем "допустим", хотя он мог быть очищен.

2 голосов
/ 09 января 2010

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

0 голосов
/ 09 января 2010

Проверка предназначена для очистки входных данных пользователя.

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