Wie funktioniert reply_to und respond_with in Schienen?

8

Wenn es

gibt %Vor%

Es scheint, als ob die Zeile html und die Zeile js automatisch die Datei abruft / aufruft, die dem Namen der Aktion entspricht. Und die html und die js sind das eine oder das andere, nicht beides. Ist das korrekt?

Der JSON wird aufgerufen, wenn Sie einen AJax-Anruf in Ihrem js haben, der angerufen wurde, und er fordert Daten an, und diese benötigen Daten, um mit ihnen zu antworten, richtig? Brauche ich es, um auf json und js oder nur auf eins zu antworten?

Wenn Sie nicht antworten und alle Typen weglassen, reagiert sie standardmäßig auf html und js?

Wenn ich in der Steuerung response_to statt in jeder Aktion blockiere, um einen Block zu blockieren, gilt respond_with @objects für jedes Argument (: thml,: js,: xml,: json usw.)?

Alternative Syntax:

%Vor%

Wie funktioniert die alternative Syntax?

Wenn Sie die alternative Syntax verwenden, können Sie nicht unterschiedlich auf verschiedene Arten von Anfragen reagieren? Müssen Sie einen read_to-Block anstelle der alternativen Syntax erstellen, wenn Sie anders reagieren möchten? Wie geht jeder dieser Fälle auf eine gradevolle Verschlechterung in HTML ein?

    
ahnbizcad 14.07.2014, 22:29
quelle

3 Antworten

9
  

respond_with

     

Für eine bestimmte Controller-Aktion generiert respond_with eine angemessene Antwort basierend auf dem vom Client angeforderten MIME-Typ.

Dies bedeutet im Grunde, dass Ihr Controller die entsprechenden Daten auf Anfrage sendet - zum Beispiel, wenn Sie Folgendes getan haben:

%Vor%

Dies würde grundsätzlich mit den Daten von @article jedes Mal antworten, wenn Sie eine Anfrage senden. Wenn die Anforderung im Mime-Typ json ist, wird sie als JSON-Objekt zurückgegeben. Wenn es sich um eine HTML-Anfrage handelt, wird sie mit dem HTML-Objekt in der show -Ansicht

zurückkommen

-

  

respond_to

     

Grundsätzlich können Sie die spezifischen Antworten auf verschiedene Mime-Typen anpassen. Wenn Sie eine JS-Anfrage senden, können Sie die JS-Antwort usw. verwalten

respond_to Blöcke innerhalb der Controller-Aktionen sind sehr umständlich und nur für bestimmte Änderungen / Bearbeitungen an der Antwort selbst gedacht.

Eine viel einfachere Methode, respond_to zu bearbeiten, besteht darin, sie oben in der Controller-Datei zu deklarieren und Rails im Wesentlichen mitzuteilen, dass jede Aktion die in dieser Methode definierten Optionen verwendet:

%Vor%     
Richard Peck 15.07.2014, 07:22
quelle
7

Beachten Sie, dass das Rails 4 respond_with -Feature in das gem 'responders' ( Ссылка ).

    
lakesare 09.11.2015 03:39
quelle
0

Die Fälle, in denen Sie jede format.*whatever* -Zeile brauchen / brauchen.

Normalerweise brauchen Sie nichts davon. Rails sucht standardmäßig nach einer HTML-Datei (auch Vorlage genannt), die mit dem Aktionsnamen unter dem View-Ordner übereinstimmt, der dem Namen des Controllers entspricht.

Ich bin mir nicht sicher, wann / warum die json und html manchmal gepaart werden (wie im scaffold-generated code). Vielleicht ist die json Linie für Turbolinks (bitte bestätigen / korrigieren). Aber ich weiß, dass Sie einen respond_to Block mit verschiedenen Arten von Formatzeilen verwenden, wenn jeder Typ sich anders verhalten soll (z. B. 10 Ergebnisse gleichzeitig durch js, aber mehr Ergebnisse durch html).

Das Format js wird benötigt, wenn Sie remote: true in einem Formular oder einer Verknüpfung verwenden. Dies liegt daran, dass die Verwendung von remote: true die HTML-Vorlage deaktiviert und stattdessen nach einer js-Datei sucht, die mit dem Namen der Aktion übereinstimmt, und diese Datei ausführt / rendert. Sie brauchen die Antwort auf die JSON-Zeile nicht wirklich, wenn Sie nur in js arbeiten.

Bonushinweis: Wenn Ihre js-Dateien js.erb haben, können Sie auf die Instanzvariablen zugreifen (wie wäre es mit lokalen Variablen? Bitte bestätigen / korrigieren Sie diese), die Sie in Ihrer Aktion festgelegt haben. Diese Art von Sinn macht Sinn, weil Ihre *.js.erb -Datei technisch eine Ansicht ist. Views können auf die Variablen ihrer entsprechenden Aktionen zugreifen (hmm, was ist, wenn Vies von einem anderen Controller gerendert werden?). Wenn Sie also bereits Zugriff auf die Variablen Ihrer Aktion in Ihrer js-Datei haben, können Sie in vielen Situationen keine Ajax-Aufrufe oder Json-Aufrufe mehr ausführen müssen.

Ich bin mir eigentlich nicht sicher, wann du die json-Zeile brauchst, wenn du auch remote: true / javascript verwendest. explizite jQuery.ajax () -Methodenaufrufe, die JSON-Daten könnten die Verwendung der Antwort auf JSON-Zeile rechtfertigen.

    
ahnbizcad 16.07.2014 02:07
quelle

Tags und Links