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?
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)
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)