2017-10-10 2 views
0

Donc, je suis actuellement en utilisant la commande suivante pour joindre et interroger mes tables - la recherche d'un OrderItem parmi mes Ordres où le orderable_id = applicable_product_item_id le TOTAL_PRICE = 0 et le buyer_id = current_userComment interroger une relation ActiveRecord pour le champ created_by

Order.joins(:items) 
    .where(order_items: {id: OrderItem.where(orderable_id: applicable_product_item_id)}) 
    .where(total_price: 0) 
    .where(buyer_id: current_user) 

tout cela fonctionne très bien, mais maintenant je veux interroger plus loin et je veux savoir si l'ordre qu'il a trouvé a un created_at date>searchable_created_by_date

J'ai essayé d'utiliser un autre .où dans la requête, ainsi que sélection de la .first dans le tableau et l'interrogation en outre que par exemple la requête = above_query.first

puis

query.where("created_at > ?", searchable_created_by_date) 

mais je reçois

Undefined method where for #<Order:0x007fbc8d8edf90> 
+2

Lorsque vous faites 'query = above_query.first', vous n'avez plus de requête chaînable. C'est pourquoi vous obtenez l'erreur 'no method'. Donc, c'est un non-go. Qu'avez-vous obtenu lorsque vous avez simplement essayé d'enchaîner sur une autre déclaration '.where'? – jvillian

+0

pouvez-vous montrer où la requête est initialisée? – krishnar

+0

@jvillian quand je chaîne le. Où je reçois la référence de la colonne "created_at" est ambigu –

Répondre

1

commentaire de furman87 sonne juste pour moi:

Vous devez spécifier la table dans votre clause where - .où ("orders.created_at>?", Searchable_created_by_date)

vous pouvez également essayer:

Order. 
    where(total_price: 0). 
    where(buyer_id: current_user). 
    where("created_at > ?", searchable_created_by_date). 
    joins(:order_items). 
    where(order_items: {id: OrderItem.where(orderable_id: applicable_product_item_id)}) 

Je pense que mettre la déclaration created_at avant la joins déclaration va désambiguïser la requête - mais je ne suis pas sûr à 100%. En outre, j'aurais pensé que vous auriez fait joins(:order_items). Mais, je suppose que cela dépend de la façon dont vous avez mis en place vos associations. Si joins(:items) travaille pour vous, alors plus de puissance pour vous! (Et ignorer le commentaire.)

+1

merci guys - orders.created_at a supprimé l'ambiguïté –