Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在选择活动记录查询界面中调用方法?_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 如何在选择活动记录查询界面中调用方法?

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

如何从另一个方法调用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.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")
.....