Rails 3.1: Der neue Weg für die Verwendung von 'respond_to ... format.js' ohne die 'Seite' variable
Ich bin versucht, zu aktualisieren Ruby on Rails auf die version 3.1. Ich folgte der Upgrade auf Rails 3.1 screencast und alles scheint zu funktionieren, außer für Anweisungen, wie
format.js { render(:update) { |page| page.redirect_to @article } }
In viele Controller habe ich einen code wie den folgenden:
def create
...
respond_to do |format|
format.js { render(:update) { |page| page.redirect_to @article } }
end
end
In allen oben genannten Fällen, wenn ich versuche zu senden Verwandte Formen der Durchführung JS-Anfragen, bekomme ich die folgende Fehlermeldung:
ActionView::MissingTemplate (Missing template articles/update, application/update with {:handlers=>[:erb, :builder, :coffee], :formats=>[:js, :html], :locale=>[:en, :en]}. Searched in:
* "/<MY_PROJECT_PATH>/app/views"
):
app/controllers/articles_controller.rb:114:in `create'
Rendered /<...>/.rvm/gems/ruby-1.9.2-p136/gems/actionpack-3.1.0/lib/action_dispatch/middleware/templates/rescues/missing_template.erb within rescues/layout (0.3ms)
Ich weiß, dass problem wurde im Zusammenhang mit RJS-templates, weil Sie nicht mehr verfügbar in der Version 3.1. Also, um zum ausführen von JavaScript-code in meinen controller-Dateien, die ich kann\soll\einfügen können einige JavaScript-code wie in dem folgenden Beispiel:
format.js { render :js => "alert('Hello Rails');" }
BTW : ...aber, ist es empfohlen, JavaScript-code direkt in eine controller-Datei?
Berücksichtigung der oben genannten code in die create
controller-Aktion, würde ich gerne umleiten Benutzer zu den @article
Pfad nach einem erfolgreichen Antragstellung. Kann ich tun:
format.js { render :js => "window.location.replace('#{article_url(@article)}');" }
..aber, wie kann ich das gleiche tun durch folgende das "Ruby on Rails-Weg, um Dinge zu tun"? Wie RoR 3.1 würde mit diesen Fällen?
InformationsquelleAutor Backo | 2011-09-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde gehen mit:
Oder etwas entlang der Linien von dieser in Ihrem
application_controller.rb
:Dann in Ihrem Controller, können Sie einfach anrufen:
Hinweis: ich habe das nicht getestet 🙂
Hi Mike - was tun Sie, wenn Sie zu Durchlaufen haben, params? Für mich ist jeder zusätzliche param '?' umgewandelt wird zu "%3F " und die Umleitung fehlschlägt.
Ich habe aktualisiert auf meine Antwort auf die Arbeit mit den params. (Ich wechselte von mit Fenster.Lage.Pfadname zum Fenster.Lage.href). Argumentation erklärt sich sehr deutlich in stackoverflow.com/questions/3643041/...
Ich mag dieses besser als mit .js.erb-Dateien...
InformationsquelleAutor Mike
Mithilfe von javascript-code direkt in den controller-Dateien wird nicht empfohlen.
Statt oder
.rjs
verwenden, können Sie.js.erb
- Dateien. Sie wirken in ähnlicher Weise, so dass der Zugriff auf Instanz-Variablen und Hilfsmethoden.In meiner Frage, das Beispiel, das ich berichtete, ist "ganz einfach", da habe ich nur zwei Fälle, in denen das erstellen von controller-Aktion reagiert. Wenn response-Fälle mehr (das heißt, die JavaScript-irgendwann umleiten kann, um den Artikel Weg, ein anderes mal zu einer anderen URL und so...), wie kann ich mit diesen "bedingt" Antworten .js.erb-Datei? P. S.: ich bin mir nicht sicher, aber ich denke es wird nicht empfohlen, state class-Variablen im controller-Dateien nur für die Bearbeitung solcher Situationen. Was tun Sie Beratung?
Also die Lösung, die ich vorgeschlagen, in der Frage richtig war? Kannst du (oder jemand anderes), "bestätigen" , und machen mich ein kleines bisschen mehr wissen?
Dies ist der richtige Weg, es zu tun. Setzen Sie Ihre Variablen in der Aktion (z.B. @article) und dann in der js.erb können Sie machen es auf dem Bildschirm über Jquery, Prototype, etc...
Vielleicht war ich nicht klar. Läuft Ruby on Rails 3.1, ich möchte, Griff Weiterleitungen auf der Reaktion auf das JavaScript-Anfragen (ich denke, es müsste irgendwie in die
format.js { ... }
- Anweisung oder in einer Weise, ich würde gerne wissen...). Wie kann ich das tun?InformationsquelleAutor Alex