2016-04-25 12 views
0

Ich suche nach Hilfe bei der Definition einer Route in Sinatra, die einen Dateinamen mit einigen optionalen Parametern entspricht.Sinatra Dateiname in Params

Allerdings möchte ich sowohl Größe als auch Farbe optionale Parameter sein. So werden alle folgenden Pfade unterstützt.

/robert.png 
/robert-50.png 
/robert-50-red.png 

Aktualisiert aus mehreren Wörtern gebildet

auch Namen decken muss.

/Mr Robert Rawlins-50.png 

Ich habe mit der traditionellen Routing-Syntax gespielt aber hatte nicht viel Freude wegen der Bindestriche.

In einer idealen Welt würden diese Parameter Parameter in der Sammlung genannt werden, d. H. Params [: name] anstatt nur in der Sammlung params [: captures] aufgeführt zu sein.

Antwort

1

sollte diese Route arbeiten:

/:name-?:size?-?:colour?.:format 

Ihr erstes Beispiel fast richtig war, aber Sie müssen auch ? nach den Bindestrichen hinzufügen, um sie optional zu machen.

Sie hatten vermutlich auch einen Doppelpunkt vor format vergessen.

+0

Danke für die Antwort. Das funktioniert gut. Ein Nachteil jedoch, den ich in meinem ursprünglichen Umfang vergessen habe, ist folgender: Name ist nicht immer ein Wort. Es kann manchmal etwas wie "Mr. Robert Rawlins-50.png" oder etwas in diesem Sinne sein. Mein Fehler für diese ursprüngliche, tut mir leid. – SirRawlins

+0

Eigentlich gesagt, selbst wenn man einzelne Wörter benutzt, scheint die obige Option nicht nett zu sein. Es ist etwas über diese Bindestriche, wenn Sie Ihren Vorschlag ändern, statt/zu verwenden - es funktioniert wie ein Zauber, aber mit dem Bindestrich kann es die Größe nicht erkennen und denkt, dass es Teil des Namensparams ist. – SirRawlins

+1

@SirRawlins Wahrscheinlich müssen Sie in diesem Fall einen Regexp als URL-Parameter verwenden. Sinatra geht es gut. –