Rails 3 Rota com vários parâmetros opcionais

9

Estou tentando criar uma rota Rails que tenha parâmetros opcionais, bem como ordem variável.

Esta questão descreve um problema semelhante: Rotas com vários, opcionais e bonitos parâmetros

Estou tentando criar rotas com filtros de mapa, como parâmetros, mas sem o estilo de URL do parâmetro. A ideia é fazer com que pareçam

/search/country/:country/
/search/country/:country/state/:state/
/search/country/:country/state/:state/loc/:lat/:long/

mas você também deve poder pesquisar com

/search/state/:state/
/search/state/:state/country/:country/
/search/loc/:lat/:long/

Eu sei que eu poderia escrever instruções regex complexas com globbing de rota - no entanto, estou me perguntando se existe uma maneira de ter vários parâmetros de rota opcionais com uma ordem não especificada, algo como

/search/( (/country/:country)(/state/:state)(/loc/:lat/:long) )

Obrigado!

    
por Eric Walsh 07.04.2015 в 23:09
fonte

1 resposta

2

Você pode usar o constraints com lambda para usar várias opções de pesquisa:

  search_options = %w(country state loc)
  get('search/*path',:to => 'people#search', constraints: lambda do |request|
             extra_params = request.params[:path].split('/').each_slice(2).to_h
             request.params.merge! extra_params # if you want to add search options to params, you can also merge it with search hash
             (extra_params.keys - search_options).empty?
           end)

Você pode fazer um lambda diferente para rotas mais complexas

    
por Shalev Shalit 10.05.2015 / 22:44
fonte