0

在控制器中有一个代码

  def action1
    generic_call __method__
  end

  def action2
    generic_call __method__
  end

  #......
  def action_n
    generic_call __method__
  end

 private

 def generic_call method_name
   #..........
 end

为了摆脱重复,动态生成动作会更好吗?与静态定义相比,它会更昂贵吗?我怎样才能做到这一点?

4

1 回答 1

2

主要成本实际上是必须自己重复所有代码,请记住 Rails 的理念是 DRY(不要重复自己)。

如果通过元编程定义方法有任何开销,您根本不会注意到它,但是您可以自己运行一些基准测试以确定,但即使是 rails 源代码也充满了元编程和动态方法这个地方,特别是ActiveRecord

class MyController < ActionController::Base
  [:action1, :action2, :action3].each do |method_name|
    send :define_method, method_name do
      generic_call __method__
    end
  end
end
于 2013-04-14T13:41:06.097 回答