轨道上的红宝石 - 获取关系的百分比



订单有很多line_items,而又有employee_idamount_cents。在此查询的第二行中,我尝试通过收集具有特定employee_id的所有line_items并将其amounts_cents除以所有其他line_items来创建line_item_perc变量:

Order.joins(:tips, :line_items)
.select('line_items WHERE(custom_attributes -> "employee_id" = ?) AS employee_line_items,
  SUM(employee_line_items.amount_cents) / SUM(line_items.amount_cents) AS line_item_perc',
  params[:employee_id])
.sum('tips.amount_cents * line_item_perc')

不幸的是,这不起作用。select 语句甚至不会出现在最终的 SQL 中。(我假设这是因为sum覆盖了它。那么我还能做些什么来获得line_item_perc

def line_item_percent(employee_id, line_item_id)
  total_amount_in_cents = Order.joins(:line_items).where("employee_id = ?", employee_id).pluck(:amount_cents).sum
  line_item_cents = LineItem.find(line_item_id).amount_cents
  answer = line_item_cents / total_amount_in_cents
end #returns decimal

试试这个。用轨道而不是SQL做头顶。

最新更新