Получите отношение activerecord от модели, которая загружена ленивым - PullRequest
0 голосов
/ 07 февраля 2019

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

Пример: Model.where (filter1: true) .where.not (filter2: true) .....

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

def base_query
  @base_query ||= slice? ? slice_class.where(slice_value: @slice.value, slice_type: @slice.type) : hour_class
end

Проблема в том, что это создает несовместимые типы возвращаемых данных.Отношение ActiveRecord, если объект нарезан, в противном случае он возвращает модель ActiveRecord.

Если я добавлю .all в конце hour_class, он станет непротиворечивым, но в этот момент попадет в БД.Как мне сделать это согласованным, не теряя ленивую загрузку?

Я на Rails 5.0.3 и ActiveRecord 5.0.6

1 Ответ

0 голосов
/ 08 февраля 2019

Вы можете использовать hour_class.default_scoped.Если вы хотите игнорировать любую область по умолчанию, вы можете использовать hour_class.unscoped.

...