订单有很多line_items
,而又有employee_id
和amount_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做头顶。