Sinatra - 根据传递的参数调用方法

时间:2013-09-18 05:21:08

标签: ruby sinatra

我想在Sinatra实施这条特定路线:

post '/activate/:model/:id/?' do
model.activate stuff

基本上这里发生的是我使用Module.const_get获取模型名称。然后我在对象上调用activate方法。现在我想添加一个停用方法,我可以复制代码,只是将其修改为停用,但它不是很干净。我应该使用正则表达式,对吧?我如何“动态调用方法”(也称根据路由调用停用或激活?

1 个答案:

答案 0 :(得分:0)

一种方法是使用帮助器和对象send方法。

module Sinatra
  module ActivateDiactivate
    def activate_diactivate(route)
      activ_deactiv = route.split("/")
      post route do
       model = Module.const_get(activ_deactiv[1].to_sym)
       model.send(method, stuff)
      end
    end
  end
  register AcivateDiactivate
end


activate_diactivate '/activate/:model/:id/?'
activate_diactivate '/diactivate/:model/:id/?'