在sinatra中通往单条路线的多条路径

时间:2013-07-28 19:31:30

标签: ruby sinatra

我希望在sinatra中使用相同的路由处理程序处理多个URL:

目前我有:

get 'autocomplete' do

但理想情况下我想:

get 'autocomplete_contacts', 'autocomplete_users', 'autocomplete_companies' do

如果可能的话,我还需要一种让联系人/用户/公司离开路径的方法吗?

这可以在sinatra完成吗?

3 个答案:

答案 0 :(得分:8)

您可以这样做:

['autocomplete_contacts', 'autocomplete_users', 'autocomplete_companies'].each do |path|
    get path do
        # ...
    end
end

然后通过执行以下操作检索路由的名称:

request.path_info.gsub(/^\/autocomplete_/, '')
处理程序内部的

将产生contactsuserscompanies

如果您希望路由所有以autocomplete_开头的路线,您只需使用正则表达式:

get /^autocomplete_([a-zA-Z])/ do
    # ...
end

并通过检查params[:captures]来检索路线的名称。

答案 1 :(得分:5)

您可以使用regexp:

get %r{(autocomplete_contacts|autocomplete_users|autocomplete_companies)$} do

答案 2 :(得分:3)

使用Sinatra MultiRoute Gem - 这就是您所需要的! http://www.sinatrarb.com/contrib/multi_route.html