Область видимости по умолчанию Rails 3, область действия с переопределением

У меня ситуация, когда поведение существующего приложения меняется, и это вызывает у меня серьезную головную боль.

В моем приложении есть фотографии. Фотографии имеют статус: «партия», «очередь» или «завершена» . Все существующие фотографии в приложении являются «полными».

В 99% случаев мне нужно показывать только полные фотографии, и во всей существующей кодовой базе мне нужно, чтобы каждый вызов Фото был ограничен только полными фотографиями.

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

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

Код, который я хочу, чтобы работал, следующий:

class Photo < ActiveRecord::Base
  ...
  default_scope where(:status=>'complete')
  scope :batch, unscoped.where(:status=>'batch')
  scope :queue, unscoped.where(:status=>'queue')
  ...
end

Однако это не работает. Я попытался обернуть методы области в лямбды, и это тоже не сработало.

Я понимаю, что default_scope поставляется с багажом, но если я не могу использовать его с переопределениями, я ищу добавление scope: complete ... и мне приходится просматривать каждый вызов фотографий в моем существующем приложении и добавлять .complete , чтобы фильтровать необработанные фотографии.

Как бы вы решили эту проблему?

7
задан Community 23 May 2017 в 10:27
поделиться