Ruby on Rails: лучше проверить в модели или базе данных?

Это - обычно лучшая практика (и почему) для проверки атрибутов в модели или в определении базы данных?

Для (тривиальное) пример:

В пользовательской модели:

validates_presence_of :name

по сравнению с в миграции:

t.string :name, :null => false 

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

39
задан William Jones 2 March 2010 в 22:19
поделиться

5 ответов

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

46
ответ дан 27 November 2019 в 02:39
поделиться

А также

validates_presence_of :name

не то же самое, что и

t.string :name, :null => false 

. Если вы просто установили столбец NOT NULL в своей БД, вы все равно можете вставить пустое значение ( ""). Если вы используете модель validates_presence_of - вы не можете.

12
ответ дан 27 November 2019 в 02:39
поделиться

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

4
ответ дан 27 November 2019 в 02:39
поделиться

Зависит от дизайна вашего приложения. Если у вас приложение малого или среднего размера, вы можете сделать это в обоих случаях или только в модели, Но если у вас большое приложение, вероятно, ориентированное на службы или в слоях, тогда используйте базовую проверку, т.е. обязательную / допускающую значение NULL, минимальную / максимальную длину и т. Д. В базе данных, и более строгую, например шаблоны или бизнес-правила в модели.

0
ответ дан 27 November 2019 в 02:39
поделиться

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

2
ответ дан 27 November 2019 в 02:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: