Rails: неуместно ли волноваться во время валидации (за исключением)? - PullRequest
2 голосов
/ 18 января 2011

У вас есть Lung модель.В него вы помещаете:

validates_presence_of :human_id

Пользователи вашего приложения имеют нет контроль над тем, установлен ли human_id;приложение должно делать это автоматически.

Если :human_id когда-либо не присутствует, это не поможет вашим пользователям сказать им, что "это легкое не привязано к человеку"потому что ваши пользователи не смогут ничего с этим поделать.Не пора ли вашей модели взбеситься и выдать исключение?

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

Редактировать: Если это приемлемая вещь,Существуют ли соглашения, касающиеся , как генерировать исключения во время проверки модели?

Ответы [ 3 ]

2 голосов
/ 18 января 2011

Я бы настроил миграцию ActiveRecord так, чтобы столбец human_id не мог быть null. Таким образом, вы все равно получите исключение, если оно не установлено.

create_table :lungs do |t|
  t.integer :human_id, :null => false
  ...
end
2 голосов
/ 18 января 2011

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

1 голос
/ 18 января 2011

В моем понимании валидации не являются подходящим местом для проверки такого типа согласованности модели. Проверки только для пользовательского ввода.

Вопрос: как могло бы быть возможно, чтобы Легкое создавалось без идентификатора человека? Если ответ только через порядок программирования, вы должны исправить эту ошибку и создать для нее несколько тестов. Или, если вы действительно хотите проверять это каждый раз, вы можете проверить это в обратном вызове before_save.

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