2012-04-06 11 views
1

Ich frage mich, warum tutSchienen form_tag Umleitung auf/assets

<%= form_tag({ :action => "/search", :method => "get" }, :class => "span4") do %> 
... 
<% end %> 

den folgenden Fehler geben?

No route matches [POST] "/assets" 

ich merke es ist wegen der/Suche. Wenn ich den Code wie ...

<%= form_tag({ :action => "search", :method => "get" }, :class => "span4") do %> 
... 
<% end %> 

ohne die/search, schreibt es korrekt meine Controller-Methode. Kann jemand erklären warum?

dank

Antwort

3

Das wird tun, was Sie meinen:

<%= form_tag("/search", :method => "get" , :class => "span4") do %> 
... 
<% end %> 

Wenn der erste Parameter von form_tag ist ein Hash, wie Sie gegeben haben, ist es vergangen hinter dem neuesten Szenen zu url_for, die :action als die Aktion Teil einer Route für die umgekehrte Karte interpretiert.

Da Sie (ich denke) einfach eine einfache URL übergeben möchten, übergeben Sie es einfach als eine Zeichenfolge für das erste Argument.

Weitere Informationen here natürlich :)

+0

vielen dank =) – Sasha

1

die "action": "create", "update" oder "zerstören"

:action => "/search" 

hier die "/ Suche" ist kein sollte einen Namen "Aktion", wie erhalten Name, aber eine "URL", die nicht legal ist.

BTW, ich schlage vor, dass Sie xx_url anstelle von {: action => "",: controller => ""}, z.

<%= form_tag "/search", :method => "get" %> 

oder

# you defined "search_path" in config/routes.rb 
<%= form_tag search_path, :method => "get" %> 
+0

vielen Dank! ich denke, es wird wahrscheinlich besser sein, nur auf search_path zu ändern, da es tut, was ich will – Sasha