【问题标题】:Dynamic method calling for an arel operation调用 arel 操作的动态方法
【发布时间】:2015-04-24 14:11:30
【问题描述】:

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

谢谢

【问题讨论】:

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


    【解决方案1】:

    您可以使用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")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-27
      • 2016-01-20
      • 1970-01-01
      • 1970-01-01
      • 2013-06-26
      相关资源
      最近更新 更多