В модели Post
со многими различными областями (по дате, по автору или контенту, сумме итоговых сообщений) модель содержит атрибут status
, где, если задан статус :hidden
, он будет исключен из всех областей (например, сумма общего объема сообщений будет возвращать общие сообщения, где статус отличается от скрытых), существует ли способ «DRYer», чтобы сделать это вместо добавления чего-то вроде where status!=hidden
в каждую область?Скрыть объекты activetecord данного состояния из всех областей применения
ответ
Вы можете сделать это:
default_scope { where.not(status: :hidden) }
Это не установлено в стальном, область по умолчанию по-прежнему сфера применения и могут быть удалены с unscoped
, если вы когда-нибудь понадобится, чтобы обойти это условие:
scope :hidden { unscoped.where(status: :hidden) }
Это плохое решение, так как это сделает невозможным поиск любого скрытого сообщения. В общем, 'default_scope' следует избегать любой ценой. – tagCincy
@tagCincy неправильно. Если вам нужно обойти это, сделайте «unscope». Речь идет о том, проще ли писать '.hidden' всюду, или писать' .unscope' кучу раз. Я должен отразить это в ответе, однако, спасибо за упоминание потенциальной ловушки. –
Неявное программирование плохое. Ваше решение добавить default_scope в КАЖДЫЙ запрос к этой модели для решения проблемы по 3 запросам. – tagCincy
вы можете создать «родительскую сферу»:
scope :hidden, -> { where(status: :hidden) }
затем в областях, которые вы хотите фильтровать скрытые, снабдите его к where
:
scope :foo, -> { hidden.where(foo: :bar) }
- 1. AngularJS common $ destroy для всех областей применения
- 2. Ввод из многих областей применения кинжала 2
- 3. Сравнение двух областей применения
- 4. Использование провайдера из двух разных областей применения
- 5. Порядок инъекции зависимостей при использовании областей применения
- 6. preg_match(), чтобы соответствовать либо из данного состояния
- 7. PHP Page Blank - Непонимание областей применения
- 8. Аутентификация API Youtube - несколько областей применения
- 9. Запрос дополнительной проверки областей применения код разрешения
- 10. Rails присоединяющиеся несколько методов и областей применения
- 11. Скрыть часы из строки состояния
- 12. ASP.NET MVC4 Список всех областей
- 13. Исключая объекты из дочерних областей в AdminConfig.list (wsadmin)
- 14. Спящий режим: скрыть объекты из результата запроса
- 15. Как удалить все объекты для данного объекта из ManagedObjectContext
- 16. угловое js: значение установлено равным 0 для всех областей применения, когда данные не найдены
- 17. Как скрыть строку состояния?
- 18. скрыть строку состояния
- 19. Как избежать моделей activetecord пространства имен?
- 20. Скрыть строку состояния
- 21. Скрыть строку состояния во всех контроллерах зрения - IOS
- 22. VBScript, кажется, GC'ing объекты из вложенных областей в неправильном порядке
- 23. Скрыть индикатор загрузки из строки состояния
- 24. Скрыть навигацию и строку состояния
- 25. Выберите cloumn из данного состояния, которое не является именем столбца
- 26. Каковы общие применения переменных состояния в C++?
- 27. Скрыть строку состояния android
- 28. NinevehGL, скрыть строку состояния
- 29. Как скрыть строку состояния
- 30. MPMoviePlayerViewController Скрыть строку состояния
Создание 'hidden' сферы и добавить' hidden' в каждой области. – Magnuss