PG:: UndefinedTable: ERROR: missing FROM-clause entry for table when using joins and where
Mam dwa modele, Courier
i Order
.
Poniżej mam następujące zapytanie:
active_couriers = Courier.
available_courier_status.
where(:service_region_id => @service_region.id).
includes(:orders)
To zapytanie działa, jednak ściąga wszystkie rozkazy. Chcę ograniczyć zamówienia tylko do zamówień na dany dzień. Dodałem więc następujące zapytanie 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)
To daj mi błąd:
PG::UndefinedTable: ERROR: missing FROM-clause entry for table "orders"
Co ja tu robię?
2 answers
Hmm wygląda na to, że próbujesz włączyć current_orders
i włączyć order
. Czy są to te same tabele z różnymi warunkami? To może być mylące active record. Jestem również całkiem pewien, że mądre jest włączenie metody references
podczas odwoływania się do połączonej tabeli. Może spróbuj czegoś takiego:
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)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-06 08:34:55
Możesz również użyć eager_load
, aby zapewnić takie samo zachowanie, jak includes
+ references
tak. Wykonuje to samo Left Outer Join na stole przekazanym jako argument, ale w znacznie czystszy sposób.
Dokumenty tutaj: http://apidock.com/rails/v4.2.7/ActiveRecord/QueryMethods/eager_load
Na ten przykład:
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)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-30 19:48:02