2015-04-07 20 views
9

Ich versuche, eine Rails-Route zu erstellen, die optionale Parameter sowie unterschiedliche Reihenfolge hat.Rails 3 Route mit mehreren optionalen Parametern

Diese Frage beschreibt ein ähnliches Problem: Routes with multiple, optional, and pretty parameters

I Routen erstellen bin versucht, die Karte Filter in ihnen haben, wie Parameter, aber ohne den Parameter URL Styling. Die Idee ist, sie wie

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

aussehen, aber Sie sollten auch mit

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

Ich weiß, suchen können, dass ich komplexe Regex Aussagen mit Route Globbing schreiben könnte - aber ich frage mich, wenn Es gibt eine Möglichkeit, mehrere optionale Route Parameter mit nicht spezifizierten Reihenfolge, so etwas wie

Vielen Dank!

+0

Ich glaube, Sie bereits die beste Lösung für Ihr Problem also regexp haben – RAJ

+0

Eine andere Möglichkeit, vielleicht nicht die beste, wäre nur die mehreren Einträge in Ihrem 'routes.rb' – RPinel

+0

Ich habe Regex verwendet, um dieses Problem zu lösen, bin aber immer noch neugierig, ob das Rails5-Protokoll mehrere optionale unterstützt Parameter. Sie sollten in der Lage sein, die Begrenzungszeichen anzugeben und zwischen explizit und unterordnet zu wählen. –

Antwort

2

Sie können die constraints mit Lambda verwenden, um mehrere Suchoptionen zu verwenden:

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) 

Sie können für komplexere Routen eine andere Lambda machen

+1

Danke, das scheint eine gute/richtige Lösung für das Problem zu sein. Ich nehme an, am Ende des Tages kommt es auf Regex in einem komplexen Lambda, wie Sie sagten, hoffentlich werden sie einfach mehrere optionale Parameterunterstützung in Rails 5 hinzufügen! –

Verwandte Themen