Rails - 动态生成动作

时间:2013-04-14 12:18:30

标签: ruby-on-rails ruby

在控制器中有一个代码

  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

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

1 个答案:

答案 0 :(得分:2)

主要成本实际上是必须自己重复所有代码,请记住轨道上的哲学是干的(不要重复自己)。

如果通过使用元编程定义方法会产生开销,你根本不会注意到它,但是你可以自己运行一些基准来确定,但即使是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