如何添加单个方法来处理多个路由

时间:2016-09-29 10:48:45

标签: ruby-on-rails ruby ruby-on-rails-3 routes ruby-on-rails-3.2

我的rails应用程序是一些其他API服务的代理服务器这意味着其余服务器的所有请求都是通过我的rails应用程序进行路由。我在routes.rb文件中定义了所有require路由,并且我为控制器中的每个路由编写了不同的方法。因此,对于每个路由而不是不同的方法,我想在我的控制器中使用单个方法,我可以检查request.fullpath并根据请求参数将其重定向到适当的休息服务调用

这是我的路线看起来像

  get '/lookup/location/search', to: 'ticketing#lookup_location_search'
  get '/lookup/company/search', to: 'ticketing#lookup_company_search'
  get '/lookup/assignmentGroup/search', to: 'ticketing#lookup_assignment_group_search'
  get '/lookup/ci/search', to: 'ticketing#lookup_ci_search'
  get '/lookup/user/search', to: 'ticketing#lookup_user_search'  

对于每条路线,控制器中都有一个单独的方法,而不是我需要一个方法,可以根据请求参数进一步调用正确的休息URL

1 个答案:

答案 0 :(得分:2)

我认为你可以使用通配符路由来解决这个问题:

# routes.rb
get '/lookup/*other_parts', to: 'ticketing#proxy_action' , format: false
# maybe with constraints
# get '/lookup/*other_parts', to: 'ticketing#proxy_action' , format: false,  constraints: { other_parts: /.../ }  

# within your controller
def proxy_action
  case params[:other_parts] 
    when 'location/search'
        ...
    when 'assignmentGroup/search'
       ...
    ...
    else
      ...
  end