Rails Routing mit Query-String
Ich habe ein problem wo muss ich die Werte übergeben, die aus einer GET-Anforderung, und ich weiß nicht, wie das einrichten der routing-definition.
Meiner Kategorie-Objekt hat einen Typ(string),eine Farbe(string), und viele Produkte. Ich will erstellen Sie eine einfache web-service, mit dem die Anrufer bekommen alle eine Kategorie der Produkte, durch die übergabe der Kategorie-Typ und Farbe:
http://www.myapp.com/getProducts?catType=toy&color=red
oder ?
http://www.myapp.com/categories/getProducts?catType=toy&color=red
Wie definiere ich das richtige routing für diese situation? Gibt es bessere Möglichkeiten, dies zu tun in einer ruhigen Art und Weise... denn ich weiß, dass Rails ist Erholsam, so dass, wenn es einen Weg gibt, es zu tun "richtig", dann wäre das noch besser.
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Deinem ersten Beispiel:
Controller haben Sie catType und Farbe in den params hash:
Ist es besser so? Wahrscheinlich ja, aber es hängt von Ihren Bedürfnissen ab. Wenn Sie immer catType und Farbe-Parameter, können Sie fügen Sie diese Strecke:
Haben Sie Zugriff auf diese Parameter mit params-hash wie im vorigen Beispiel. Und Ihre urls so Aussehen:
Wenn Sie Ihre Parameter ändern können, können Sie route Platzhalter:
Dann wird es catch-all-Anforderung, die
www.my.app.com/getProduct/...
am Anfang. Aber Sie haben mehr Arbeit in controller. Sie haben Zugang zuquery
mit diesem:und für
www.myapp.com/getProduct/color/red/catType/toy
wird es geben:So haben Sie zu analysieren, es Händisch.
Einen Erholsamen Weg, um dies zu tun würde bedeuten, ein Produkt resource geschachtelte unter eine Kategorie Ressource, etwa so:
http://www.myapp.com/categories/toy/products?color=red
Ihre Routen.rb würde müssen enthalten:
Da meine url oben über die Kategorie type-Attribut für das routing, ich bin was bedeutet, dass jeder Typ ist einzigartig, wie eine id. Es bedeutet, dass, Wann immer Sie laden ein Kategorie in der Kategorien-controller (oder anderswo) Sie müssen laden Sie die Kategorie mit
Category.find_by_type(params[:id])
stattCategory.find(params[:id])
. Ich mag routing-Kategorien diese Weise, Wann immer möglich.Ihre ProductsController-controller, index-action Produkte finden, die mit Zeilen wie:
Denken Sie daran, Ihr Modell Kategorie muss die Zeile enthalten:
Ist es wahrscheinlich eine gute Idee, um zu erzwingen, dass im Modell mit Validierungen:
Machen routing-Arbeit, sollten Sie auch das überschreiben der
to_param
- Methode in der Kategorie Modell zurückzukehren, geben Sie anstatt der id: