在控制器中有一个代码
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
为了摆脱重复,动态生成动作会更好吗?与静态定义相比,它会更昂贵吗?我怎么能这样做?
答案 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