2017-10-10 57 views
0

所以我目前使用下面的命令来加入和查询我的表 - 找一个之中我订单其中orderable_id = applicable_product_item_idOrderItem的 TOTAL_PRICE = 0且buyer_id = CURRENT_USER如何查询CREATED_BY领域的ActiveRecord的关系

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

此所有工作正常,但现在我想进一步查询,我想知道,如果它发现的顺序有created_at日期>searchable_created_by_date

我已经使用在查询另一个。凡试图以及阵列中选择所述。首先,并进一步查询该查询即= above_query.first

然后

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

,但我得到

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

当您执行'query = above_query.first'时,您不再有可链式查询。这就是为什么你得到'没有方法错误'。所以,这是一个不行。当你试图链接另一个'.where'语句时,你得到了什么? – jvillian

+0

你可以显示查询获取初始化的位置吗? – krishnar

+0

@jvillian当我链的。我得到列引用“created_at”是模棱两可的 –

回答

1

furman87的评论的权利的声音对我说:

你必须指定表中的WHERE子句 - 。哪里( “orders.created_at>?”,searchable_created_by_date)

您也可以尝试:

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

认为created_at声明前声明将消除查询 - 但我不是100%确定。

此外,我会想你会做joins(:order_items)。但是,我想这取决于你如何建立你的关联。如果joins(:items)适合你,那么给你更多的权力! (并且忽略评论。)

+1

谢谢guys - orders.created_at消除了歧义 –