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

dag*_*da1 2 ruby sinatra

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

目前我有:

get 'autocomplete' do
Run Code Online (Sandbox Code Playgroud)

但理想情况下我想:

get 'autocomplete_contacts', 'autocomplete_users', 'autocomplete_companies' do
Run Code Online (Sandbox Code Playgroud)

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

这可以在sinatra完成吗?

Sho*_*hoe 8

你可以简单地做:

['autocomplete_contacts', 'autocomplete_users', 'autocomplete_companies'].each do |path|
    get path do
        # ...
    end
end
Run Code Online (Sandbox Code Playgroud)

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

request.path_info.gsub(/^\/autocomplete_/, '')
Run Code Online (Sandbox Code Playgroud)

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

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

get /^autocomplete_([a-zA-Z])/ do
    # ...
end
Run Code Online (Sandbox Code Playgroud)

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


pht*_*hts 5

您可以使用regexp:

get %r{(autocomplete_contacts|autocomplete_users|autocomplete_companies)$} do
Run Code Online (Sandbox Code Playgroud)


dip*_*ent 5

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