In Rails5 API konnte ich Contraint zu Routen hinzufügen. Beispielsweise;Wie man Abfrage Parameter Constraints auf Trauben anwenden?
GET /hello => hello#index
GET /hello?download => hello#download
Wie Sie sehen können, sind beide URLs gleich. Der einzige Unterschied ist der zweite, der eine Beschränkung hat und wenn der Download-Parameter in der URL ist, dann wird er zu einer anderen Aktion umgeleitet.
Wie kann ich das gleiche auf Grape machen? Ich konnte keine Ressource in ihrer Dokumentation oder in der Problemliste finden.
get :hello do
'I am a hello world page'
end
aber wenn URL hat einige Abfrageparameter, die ich vorgegeben dann möchte ich dies auszuführen:
get :hello do { ?download }
'download a file (for example)'
end
Ich spielte mit params
und erstellt ein requires
params. Noch eins fangen die Anfrage.
Dies ist, was ich auf Rails API für die Routen verwenden:
class DownloadConstraint
def matches?(request)
request.query_parameters.key?('download')
end
end
UPDATE: ich dies klar sein wollen. Ich möchte beide Routen zusammen nutzen. Ich weiß, params Tasche kann verwendet werden, um Parameter vor der Ausführung zu verlangen. Was ich erreichen möchte, ist, dass ich Routen basierend auf GET-Parametern festlegen möchte. Siehe Rails' advanced contraints: http://guides.rubyonrails.org/routing.html#advanced-constraints
Dank. Aber das funktioniert nicht. Siehe, Dies erfordert: Downloadparameter, der angegeben werden soll. Aber was, wenn ich diesen Parameter nicht schreibe? Ich möchte sie zu einer anderen Aktion umleiten. Ich möchte die Route basierend auf Parametern ausführen. Ich habe schon die Probe in meiner Frage. Ich würde gerne ': hallo' ** mit ** und ** ohne ** Parameter ** separat ** verwenden. Wenn ich das benutze, sagt Route "Download" fehlt, wenn ich es nicht auf URL setze. Siehe hier: http://guides.rubyonrails.org/routing.html#advanced-constraints – Pratha
Sorry, ich habe deine Frage missverstanden. Ich würde es mit einem optionalen Parameter und einer Weiterleitung behandeln. – infused
Es ist in Ordnung. Ich möchte eigentlich nicht HTTP-Redirect machen. Ich würde gerne direkt auf Anfragen reagieren, genau wie in Rails. Ich bin mir sicher, dass Trauben diese Option haben werden, aber ich weiß nicht wie. Wenn Rails kann, kann Trauben auch (ich denke). Oder gibt es eine Möglichkeit, die Anfrage intern an eine andere Methode/Route umzuleiten, ohne den Browser oder die Anfrage des Benutzers umzuleiten. – Pratha