2012-04-13 14 views
0

Ich erhalte den Fehler "No route matches" beim Aufruf von search_path in meinem search_field_tag. Das Suchformular befindet sich in meiner Kopfzeile, die Idee ist einfach in der Lage zu sein, nach Ereignissen zu suchen. HierRails 3 Benannte Route mit Segmentschlüssel "No route matches" Suchformular

ist die Route in routes.rb:

match '/events/search/:query' => 'events#search', :as => "search" 

Hier ist der Code für das Suchformular.

<%= form_tag search_path, :method => :get do %> 
    <%= text_field_tag :query, params[:query] %> 
    <%= submit_tag "search", :name => :nil %> 
<% end %> 

(Wie sicher zu machen, wenn ich dieses Formular abgesendet haben, dass es zu/Veranstaltungen/Suche/vorlegen wird: Abfrage: Abfrage der Wert in der search_field_tag ​​ist)

Hier ist der Code in meinem events_controller ist

def search 
     @search_q = params[:query] 
     @events = Event.search @search_q #uses thinking sphinx 

     respond_with @events 
    end 

ich habe auch /views/events/search.html.erb

erstellt ich bin mir ziemlich sicher, dass der Fehler von der Linie in dem Suchformular kommt, wo ich search_path sagen. Alles andere scheint genau so zu funktionieren, wie ich es erwarte, obwohl ich zum Beispiel, wenn ich/events/search/someterm besuche, genau so funktioniert, wie ich es erwarte. Es ist nur eine Frage des Einstöpselns des Suchformulars und des Sendens an Ereignisse # Suche. Irgendeine Hilfe? Vielen Dank!

+0

Was ergeben Rake-Routen? –

+0

suche /events/search/:query(.:format) {: action => "suche",: controller => "ereignisse"} – botbot

Antwort

1

Ich denke, das Problem hier ist, dass Abfrage als eine Post-Anfrage übergeben wird. Ihr Weg sucht:

/events/search 

wo, wie Sie definiert:

/events/search/:query 

So fallen nur die /: Abfrage am Ende der Route. Die Abfrage wird als Parameter für Post übergeben. Keine Notwendigkeit, es in den Routen zu haben.

+0

danke für die antwort. Ich habe meine Route aktualisiert, wie du es vorgeschlagen hast, aber jetzt gibt es neue Probleme: Event mit id = search konnte nicht gefunden werden. klar denkt es nun, dass Suche die: id in/events/search ist. Ich kann auch sehen, dass die Show-Aktion aufgerufen wird. – botbot

+0

Ich habe auch meinen obigen Code aktualisiert, um zu zeigen, dass ich explizit anrufe: method =>: get. – botbot

+0

Stellen Sie sicher, dass sich Ihre Suchroute oberhalb der Ereignisressourcen befindet. Die Routen werden in der richtigen Reihenfolge ausgeführt. Wenn die route "///id" dann zuerst ist, wird sie versuchen, nach einem Ereignis mit einer ID der Suche zu suchen und einen Fehler zurückzugeben. –

Verwandte Themen