3

我想让多个 url 由 sinatra 中的同一个路由处理程序处理:

目前我有:

get 'autocomplete' do

但理想情况下,我想:

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

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

这可以在sinatra中完成吗?

4

3 回答 3

10

你可以简单地做:

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

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

request.path_info.gsub(/^\/autocomplete_/, '')

在处理程序内部,这将产生contacts,userscompanies.

如果您希望路由以您开头的所有路由,autocomplete_则可以简单地使用正则表达式:

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

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

于 2013-07-28T19:34:01.550 回答
6

您可以使用正则表达式:

get %r{(autocomplete_contacts|autocomplete_users|autocomplete_companies)$} do
于 2013-07-28T19:36:42.933 回答
5

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

于 2014-09-23T15:43:12.220 回答