2015-04-07 6 views
9

Sto tentando di creare un percorso Rails con parametri facoltativi e ordine variabile.Rotaie 3 Percorso con più parametri opzionali

Questa domanda descrive un problema simile: Routes with multiple, optional, and pretty parameters

Sto cercando di creare dei percorsi che hanno filtri mappa in loro, come i parametri, ma senza lo stile parametro URL. L'idea è di farli apparire come

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

, ma si dovrebbe anche essere in grado di cercare con

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

So che avrei potuto scrivere istruzioni regex complesse con percorso globbing - tuttavia mi chiedo se c'è un modo per avere più parametri opzionali di route con ordine non specificato, qualcosa come

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

Grazie!

+0

penso che hai già la soluzione migliore per il vostro problema cioè espressione regolare – RAJ

+0

Un altro modo, forse non il migliore, sarebbe avere solo le voci multiple nel tuo 'routes.rb' – RPinel

+0

Ho usato Regex per risolvere questo problema, ma sono ancora curioso di sapere se esiste il desiderio che il protocollo Rails5 supporti più opzioni parametri. Dovresti essere in grado di specificare i delimitatori e scegliere tra esplicito e sottordinato. –

risposta

2

È possibile utilizzare il constraints con lambda di utilizzare più opzioni di ricerca:

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) 

È possibile effettuare una lambda diverso per i percorsi più complessi

+1

Grazie, questa sembra essere una buona soluzione per il problema. Suppongo che alla fine della giornata si giunge alla regex in un lambda complesso come hai detto tu, sperando che aggiungano un facile supporto per più parametri facoltativi in ​​Rails 5! –