undefinedtable tipos missing from for error entry ruby-on-rails ruby-on-rails-4 psql

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)