Wie leitet man eine Aktion an den Anwendungscontroller in Rails 3?
-
23-10-2019 - |
Frage
Ich verwende die GEM Rails3-Jquery-Auto Complete und hatte keine Probleme damit, aber ich habe jetzt mein automatisches Formular in die Anwendungsvorlage verschoben, und daher werden die AJAX-Anrufe nun vom Anwendungscontroller behandelt, sodass meine Routen sich geändert haben.
home/autocomplete_category_name
und jetzt müssen das Haus entfernt und den Weg von:
home_autocomplete_category_name_path
zu:
autocomplete_category_name_path
Hat jemand irgendwelche Ideen? Das Erlernen der Vor- und Nachteile von Schienen, also ist dies eine Sackgasse für mich im Moment.
Vielen Dank.
Lösung
URLs sind nicht direkt zugeordnet ApplicationController
- Nur Unterklassen davon.
Sie müssen den Anruf an verschieben autocomplete
in einen anderen Controller. Die Position des Formulars sollte keinen Unterschied machen, solange Sie den richtigen Weg bestehen, wenn Sie Ihre definieren text_field
Andere Tipps
Alter Beitrag, aber die akzeptierte Antwort ist falsch. Obwohl der Geist dessen richtig ist - sollten Sie Ihre Methode wahrscheinlich in einen angemesseneren Controller verschieben; aber wenn du pochen Bei der Methode in application_controller.rb
# routes.rb
match '/some_route', to: 'application#some_route', as: :some_route
... wird zur Methode 'slow_route' in application_controller.rb weitergeleitet.
Ein weiterer Necro, aber es gibt eine trockenere Art, dies zu tun, im Vergleich zu Pavling -Lösung
get :autocomplete_category_name, controller:"application"
Ich habe (gestern) versucht, es in den Anwendungscontroller zu verschieben, um zu versuchen, Code besser wiederzuverwenden und ihn nicht an einen bestimmten Controller zu binden. Erst heute wurde mir klar, dass dies keinen Sinn ergibt, da der Controller, der verwendet wurde, um diesen Anruf zu beantworten, ein völlig anderes Objekt sein wird als der Controller, der die Ansicht sowieso rendert.
Mit Rails 4 müssen Sie GET verwenden, nicht übereinstimmen ...
# routes.rb
get '/autocomplete_category_name', to: 'application#autocomplete_category_name', as: :autocomplete_category_name
Versuchen Sie etwas wie
match "home/autocomplete_category_name", "home#autocomplete_category_name", :as => "autocomplete_category_name"
Verwenden Sie in Rails 4 Folgendes:
get 'application/autocomplete_category_name', as: 'autocomplete_category_name'
Sie haben an Ihren Links 'autocomplete_category_name_path' 'Links