PG::UndefinedTable: ERREUR: manquant DE la clause d'entrée pour la table lors de l'utilisation de jointures et d'où

j'ai deux modèles, Courier et Order.

j'ai la requête suivante ci-dessous:

active_couriers = Courier.
  available_courier_status.
  where(:service_region_id => @service_region.id).
  includes(:orders)

Cette requête fonctionne, cependant, il tire dans tous les ordres. Je veux limiter les commandes à celles de la journée. J'ai donc ajouté la requête suivante 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)

Ceci me donner le message d'erreur:

PG::UndefinedTable: ERROR:  missing FROM-clause entry for table "orders"

Que fais-je tort?

40
demandé sur Ruy Diaz 2014-08-03 01:41:36

2 réponses

Hmm on dirait que vous essayez d'inclure current_orders et order. Sont-ce les mêmes tableaux avec des conditions différentes? Ce pourrait être les confondre enregistrement actif. Aussi, je suis assez sûr qu'il est sage d'inclure le references méthode de référencement d'une table jointe. Peut-être, Essayez quelque chose comme ceci:

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)
67
répondu Dane O'Connor 2016-04-06 08:34:55

vous pouvez aussi utiliser eager_load pour fournir exactement le même comportement que includes+ references ne. Il exécute la même jointure extérieure gauche sur la table passée comme un argument, mais d'une manière beaucoup plus propre.

Docs ici: http://apidock.com/rails/v4.2.7/ActiveRecord/QueryMethods/eager_load

par cet exemple:

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)
6
répondu mattcongel 2016-11-30 19:48:02