PG:: UndefinedTable: ошибка: отсутствует запись из-предложения для таблицы при использовании соединений и где
у меня есть две модели, Courier
и Order
.
у меня есть следующий запрос ниже:
active_couriers = Courier.
available_courier_status.
where(:service_region_id => @service_region.id).
includes(:orders)
этот запрос работает, однако он тянет все заказы. Я хочу ограничить заказы только заказами на день. Поэтому я добавил следующий запрос where("orders.created_at >= ?", Time.zone.now.beginning_of_day)
.
active_couriers = Courier.
available_courier_status.
where(:service_region_id => @service_region.id).
includes(:current_orders).
includes(:orders).
where("orders.created_at >= ?", Time.zone.now.beginning_of_day)
это дает мне ошибку:
PG::UndefinedTable: ERROR: missing FROM-clause entry for table "orders"
что я здесь делаю неправильно?
2 ответов
Хм, похоже, вы пытаетесь включить current_orders
и включения order
. Одни и те же таблицы с разными условиями? Это может быть путать active record. Кроме того, я уверен, что разумно включить references
метод при ссылке на объединенную таблицу. Возможно, попробуйте что-то вроде этого:
active_couriers = Courier.includes(:orders)
.available_courier_status
.where(:service_region_id => @service_region.id)
.where("orders.created_at >= ?", Time.zone.now.beginning_of_day)
.references(:orders)
вы также можете использовать eager_load
чтобы обеспечить такое же точное поведение, как includes
+ references
делает. Он выполняет то же самое левое внешнее соединение на таблице, переданной как аргумент, но гораздо более чистым способом.
документы здесь:http://apidock.com/rails/v4.2.7/ActiveRecord/QueryMethods/eager_load
в этом примере:
active_couriers = Courier.eager_load(:orders)
.available_courier_status
.where(:service_region_id => @service_region.id)
.where("orders.created_at >= ?", Time.zone.now.beginning_of_day)