Ich arbeite an einem Film Rails Projekt und ich muss die URL umleiten RESTful, aber ich habe keine Ahnung, wie es gemacht wird. Die folgenden Informationen nützlich sein können:[Ruby on Rails] Weiterleitung an RESTful URL
Ich kann nicht: GET /movies when selecting a movie rating should redirect to a RESTful route
Rake Routen:
Prefix Verb URI Pattern Controller#Action root GET / movies#index movies GET /movies(.:format) movies#index POST /movies(.:format) movies#create new_movie GET /movies/new(.:format) movies#new edit_movie GET /movies/:id/edit(.:format) movies#edit movie GET /movies/:id(.:format) movies#show PATCH /movies/:id(.:format) movies#update PUT /movies/:id(.:format) movies#update DELETE /movies/:id(.:format) movies#destroy
einige Beschreibungen von dem, was ich zu tun habe: (sagen im Allgemeinen, wenn der Benutzer löscht absichtlich einige Attribute von der URL, ich habe es auf die richtige URL umleiten):
Um RESTful zu sein, möchten wir die Eigenschaft beibehalten, dass ein URI, der zu einer sortierten/gefilterten Ansicht führt, immer die entsprechenden Sortier-/Filterparameter enthält.
Der Code, den ich die Aufgabe zu tun umgesetzt haben:
if !(params.has_key?(:sort_by)) #check the url has this parameter
if session[:sort_by] #has cookie
redirect_to movies_path(:sort_by => session[:sort_by]) #redirect using cookie, not sure need to add :ratings
else
session[:sort_by] = "id" # default sorting
end
end
if !(params.has_key?(:ratings))
if session[:ratings]
redirect_to movies_path(:ratings => session[:ratings]) # error: AbstractController::DoubleRenderError
else
session[:rating] = {"G"=>"1", "PG"=>"1", "PG-13"=>"1", "R"=>"1"}
end
end
: sort_by ist das Attribut zu steuern, wie sich die Filme sortiert, z.B. session[:sort_by] = "date"
bedeutet sortiert nach dem Veröffentlichungsdatum.
: ratings sind so etwas wie: "ratings"=>{"G"=>"1", "PG-13"=>"1", "R"=>"1"}
Ein Beispiel URL: /movies?ratings%5BG%5D=1&ratings%5BPG%5D=1&ratings%5BPG-13%5D=1&ratings%5BR%5D=1&sort_by=title
wenn ich so etwas wie .../Filme geben, sollte die URL aus Cookie (falls vorhanden) erzeugt werden. Aber ich habe einige Probleme:
zum Beispiel überprüfen wir, dass sort_by fehlt, und es gibt Sitzung für sort_by, müssen wir noch Sitzung [: Bewertungen] zu movies_path() liefern? Und was ist zu tun, wenn ich das erste Mal auf diese Website komme (keine Sitzung [: Bewertungen]/Sitzung [: sort_by]), aber ich benötige immer noch die RESTful URL (alle aktivierten Kästchen werden standardmäßig angeklickt)
Einige weitere Anweisungen:
Sie sollten also umleiten, wenn Parameter in URL fehlen, anstatt in URL + Sitzung. Das bedeutet, wenn 'sort_by' nicht in der URL, sondern in der Sitzung enthalten ist, sollten Sie diese URL mit Sitzungsdaten ausfüllen und zur vollständigen URL umleiten (also ausfüllen, wenn 'Bewertungen' ebenfalls fehlt). Was nun, wenn ein Parameter sowohl in der URL als auch in der Sitzung fehlt? Sie sollten sich auf einige Initialisierungsregeln verlassen. Bei "Bewertungen" sollten Sie alle Bewertungen überprüfen. und für 'sort_by' können Sie das Schlüsselwort auf 'id' setzen, was bedeutet, dass Elemente standardmäßig sortiert sind (die Reihenfolge der Filme in dem von Movie.all zurückgegebenen Array).