ruby-on-rails - tipos - pg:: undefinedtable error missing from clause entry for table
PG:: UndefinedTable: ERROR: falta la entrada FROM-cláusula para la tabla cuando se usa join y donde (2)
Tengo dos modelos, Courier
y Order
.
Tengo la siguiente consulta a continuación:
active_couriers = Courier.
available_courier_status.
where(:service_region_id => @service_region.id).
includes(:orders)
Esta consulta funciona, sin embargo, atrae todas las órdenes. Quiero limitar los pedidos solo a los pedidos del día. Así que agregué la siguiente consulta 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)
Esto me da el error:
PG::UndefinedTable: ERROR: missing FROM-clause entry for table "orders"
¿Qué estoy haciendo incorrectamente aquí?
Mmm, parece que intentas incluir current_orders
e incluir order
. ¿Son estas las mismas tablas con diferentes condiciones? Esto podría confundir el registro activo. Además, estoy bastante seguro de que es conveniente incluir el método de referencias al hacer referencia a una tabla unida. Tal vez, intente algo como esto:
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)
También puede usar eager_load
para proporcionar el mismo comportamiento exacto que includes
+ references
. Realiza la misma unión externa izquierda en la mesa pasada como argumento, pero de una manera mucho más limpia.
Documentos aquí: http://apidock.com/rails/v4.2.7/ActiveRecord/QueryMethods/eager_load
Por este ejemplo:
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)