Вопрос

Я использую rspec для тестирования и сценарии Hornsby для графов объектов, используемых в тестах.

Является ли хорошей практикой инициализировать столбцы кэша счетчиков значением 0 вместо того, чтобы оставлять их неинициализированными (ноль)?Или мне следует определить значение по умолчанию в миграциях, которые создают эти столбцы кэша счетчиков?

Это было полезно?

Решение

Да, вам следует установить значение по умолчанию.В противном случае вам придется использовать специальные математические операции для обработки значений NULL.

Допустим, у вас есть массив объектов сообщений и вы хотите получить сумму количества комментариев.

Если вы инициализируете нулем @posts.sum(&:comment_count) будет, но если вы этого не сделаете, возможно, и нет, потому что он потерпит неудачу при нуле.

Я рекомендую определить ваш столбец следующим образом:

add_column :posts, :comments_count, :integer, :default => 0, :null => false

Другие советы

Rails просто отправляет следующий SQL

UPDATE posts SET comment_count = comment_count + 1, WHERE id IN (10, 15)

Таким образом, либо БД знает, что undefined +1 == 1, либо Rails выполняет собственную инициализацию.В любом случае мне это кажется стабильным поведением, поэтому не устанавливайте их на ноль и сохраните работу.Поскольку вы все равно не сможете увидеть, сделали ли вы инициализацию (без нее она работает точно так же), как вы ее протестируете.И если вы не гарантируете, что он будет инициализирован вами, что вы действительно получите с точки зрения будущей проверки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top