动态方法调用arel操作

时间:2015-04-24 14:11:30

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord arel

我有一段涉及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不是一个好习惯。

由于

1 个答案:

答案 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")