2010-12-21 12 views
1

Ich bin wieder, Ringen mit Schienen 3 und Routen. HierNormalisierung Params eine benannte Route in Schienen

ist das Problem:

Ich habe eine benannte Route wie diese zum Beispiel:

match '/download/artist/:artist/album/:albumName', :to => "albums#show", :as => :search, :via => :get, die mir diesen Weg gibt: search_path

ich auch die Klassiker wie dieses: get "albums/show", die mir diese Route gibt: albums_show_path.

Allerdings, wenn ich die search_path mit einigen Parametern wie folgt aus:

<%= link_to "#{result.name[0..50]}(...)", search_path(:artist =>result, :albumName => result.name), :class => "albumName" %>

, versagt es, aber nicht mit dem albums_show_path. Hier ist der Fehler:

no route matches {:controller=>"albums", :action=>"show", :artist=>"Eddie Vedder & Ben Harper", :albumName=>"My City of Ruins/My Father's House (Live) [Benefiting Artists for Peace and Justice Haiti Relief] {Digital 45}"}

ich es wahrscheinlich wissen, ist, dass der Albumname Parameter nicht entgangen ist. Aber auch nach dem Versuch, es mit CGI.escape zu entkommen, funktioniert nicht. Ich nehme an, ich muss es in der route.rb tun, aber ich habe keine Ahnung wie.

Haben Sie eine Idee, wie es geht?

EDIT

Der Fehler sagt: keine Route Spiel usw. Wenn ich es nicht einen Parameter mit ungültigen Zeichen haben, um die Strecke zu finden.

** EDIT rake routes **

welcome_index GET /welcome/index(.:format) {:controller=>"welcome", :action=>"index"} albums_index GET /albums/index(.:format) {:controller=>"albums", :action=>"index"} albums_show GET /albums/show(.:format) {:controller=>"albums", :action=>"show"} search GET /download/artist/:artist/album/:albumName(.:format) {:controller=>"albums", :action=>"show"} albums_show_album_info GET /albums/show_album_info(.:format) {:controller=>"albums", :action=>"show_album_info"} albums_show_itunes GET /albums/show_itunes(.:format) {:controller=>"albums", :action=>"show_itunes"} albums_show_spotify GET /albums/show_spotify(.:format) {:controller=>"albums", :action=>"show_spotify"} albums_show_carrefour GET /albums/show_carrefour(.:format) {:controller=>"albums", :action=>"show_carrefour"} root /(.:format) {:controller=>"welcome", :action=>"index"}

+0

Was ist der Fehler? Ich sehe keinen, wirklich? – Ariejan

+0

Ich habe einige Details hinzugefügt. Aber im Grunde ist der Fehler keine Übereinstimmung der Route. Aber es findet die Route, wenn es kein '(' zum Beispiel gibt. – Pasta

+0

Was ist die Ausgabe von Rake-Routen? – Kezzer

Antwort

-1

Sie könnten die ungültigen Zeichen Swap (je nachdem, was diejenigen, die sie mit etwas sind wie) mit gsub:

<%= link_to "#{result.name[0..50]}(...)", search_path(:artist =>result, :albumName => result.name.gsub("/","\/").gsub("whateverelse", "newvalue"), :class => "albumName" %> 

denke ich, dass dies weil/werden in URLs als eine Pfadtrennung (ich vergesse den wahren Namen) interpretiert. Sie können gsub auch "verketten", wenn Sie möchten; siehe oben.

+0

könnte ich mach das, aber ich brauche diese Charaktere als Parameter für die Action meines Controllers – Pasta

Verwandte Themen