Ruby on rails 如何在选择活动记录查询界面中调用方法?
如何从另一个方法调用select active record查询界面中的方法Ruby on rails 如何在选择活动记录查询界面中调用方法?,ruby-on-rails,ruby,Ruby On Rails,Ruby,如何从另一个方法调用select active record查询界面中的方法 # return quantity of boxes def amount_boxes(order_id) amount_boxes = OrderProduct.where('order_products.order_id' => order_id).where('order_products.box IS TRUE').pluck("SUM(order_products.quantit
# return quantity of boxes
def amount_boxes(order_id)
amount_boxes = OrderProduct.where('order_products.order_id' => order_id).where('order_products.box IS TRUE').pluck("SUM(order_products.quantity)").first
if amount_boxes.nil?
0
else
amount_boxes
end
end
# return amount boxes accumulated.
def amount_boxes_accumulated(user_id, date_delivery)
quantity = OrderHistory.joins(order: [:load, :order_products])
.select("DISTINCT order_histories.order_id, #{amount_boxes('order_histories.order_id')} as amount_boxes")
.where('loads.delivery_date' => date_delivery, 'order_histories.user_id' => user_id)
.where('order_products.box IS TRUE')
.where.not(end: nil)
# time_total = OrderHistory.select("SUM(t.quantity) as amount_boxes").from(quantity, :t)
end
在“累计金额”方法中,我执行。。{amount_box'order_history.order_id'}作为amount_box。。但这是行不通的
什么是可行的方法
“存在”的结果不会生成错误,仅在查询中显示0。。像
SELECT DISTINCT order_histories.order_id, 0 as amount_boxes FROM `order_histories` INNER JOIN `orders` ON `orders`.`id` = `order_histories`.`order_id` INNER JOIN `loads` ON `loads`.`id` = `orders`.`load_id` INNER JOIN `order_products` ON `order_products`.`order_id` = `orders`.`id` WHERE `loads`.`delivery_date` = '2019-09-25 00:00:00' AND `order_histories`.`user_id` = 931135 AND (order_products.box IS TRUE) AND `order_histories`.`end` IS NOT NULL
这不会像你希望的那样起作用。不能从数据库中调用ruby方法
您可能可以重写查询,以便所有操作都在同一个DB请求中进行,但这超出了此处的范围。我用以下方法解决了此问题:
def amount_boxes_accumulated(user_id, date_delivery, order_id)
quantity_boxes_for_order = amount_boxes(order_id)
quantity = OrderHistory.joins(order: [:load, :order_products])
.select("DISTINCT order_histories.order_id, #{quantity_boxes_for_order} as amount_boxes")
.....
谢谢。当您说它不起作用时,请指定错误、意外行为等。不起作用不太可能。您必须定义它不起作用。您正在向SELECT语句传递0或整个对象,您想做什么?结果不会生成错误,只在查询中显示0。。比如…编辑问题。谢谢。如果您单独执行金额框查询,结果如何?
def amount_boxes_accumulated(user_id, date_delivery, order_id)
quantity_boxes_for_order = amount_boxes(order_id)
quantity = OrderHistory.joins(order: [:load, :order_products])
.select("DISTINCT order_histories.order_id, #{quantity_boxes_for_order} as amount_boxes")
.....