我有一段涉及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")
关于ruby-on-rails - 调用 arerel 操作的动态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29849745/