我有一段涉及arel操作的代码,并希望对其进行优化。
case group_type
when "week"
gmv = OrderItem.joins(:order).where(order: {order_date: from_date..to_date }).group_by_week("order.order_date").sum("sub_total")
when "month"
gmv = OrderItem.joins(:order).where(order: {order_date: from_date..to_date }).group_by_month("order.order_date").sum("sub_total")
when "day"
gmv = OrderItem.joins(:order).where(order: {order_date: from_date..to_date }).group_by_day("order.order_date").sum("sub_total")
end
我想要一种方法,我可以在一行中写出来,只需替换" group_by _#{group_type}"
我可以使用eval。但使用eval不是一个好习惯。
由于
答案 0 :(得分:3)
您可以使用public_send。 所以你的代码是:
OrderItem.joins(:order).where(order: {order_date: from_date..to_date }).public_send("group_by_#{group_type}", "order.order_date").sum("sub_total")