调用 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")