web-dev-qa-db-fra.com

PG :: UndefinedTable: ERREUR: entrée de clause FROM manquante pour la table lors de l'utilisation des jointures et 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, elle récupère toutes les commandes. Je souhaite limiter les commandes aux seules commandes 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)

Cela me donne l'erreur:

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

Qu'est-ce que je fais mal ici?

44
Huy

Hmm, on dirait que vous essayez d'inclure current_orders et incluez order. S'agit-il des mêmes tables avec des conditions différentes? Cela pourrait confondre l'enregistrement actif. De plus, je suis sûr qu'il est sage d'inclure la méthode references lors du référencement d'une table jointe. Essayez peut-être 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)
78
Dane O'Connor

Vous pouvez aussi utiliser eager_load pour fournir le même comportement exact que includes + references. Il effectue la même jointure gauche gauche sur la table passée en argument, mais d'une manière beaucoup plus propre.

Documents 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)
10
mattcongel