调用 arel 操作的动态方法
Dynamic method calling for an arel operation
我有一段代码涉及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 不是一个好习惯。
谢谢
您可以使用 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")
我有一段代码涉及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 不是一个好习惯。
谢谢
您可以使用 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")