Я знаю, что 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