Ruby on Rails von der Scratch Week 3

Willkommen bei Ruby on Rails von der Scratch Week 3! Diese Woche konzentrieren wir uns auf bestimmte Dinge, die Sie über das Framework wissen müssen. Wir werden zum Beispiel über die Manipulation der Struktur des Projekts auf zwei Arten sprechen (Rendern und Umleiten). Wir sprechen auch darüber, wie Sie Links in Rails hinzufügen und wie Sie Code kommentieren. Lass uns schon anfangen!

Aufholen

Wenn Sie die Teile 1 und 2 nicht gelesen haben, sollten Sie diese unbedingt durchlesen, bevor Sie mit diesem Tutorial fortfahren.

  • Woche eins
  • Zweite Woche

Interaktionen unter Aktionen hinzufügen

Nachdem wir nun gelernt haben, wie Instanzvariablen festgelegt werden, um Informationen von der Steuerung zur Ansicht zu übertragen, ist es an der Zeit, zu lernen, wie Daten zwischen verschiedenen Aktionen in einer Steuerung übertragen werden. Für dieses Lernprogramm verwenden wir weiterhin den Lerncontroller. Wir müssen uns nicht wirklich an das halten, was wir letzte Woche getan haben, aber Sie können, wenn Sie das Gefühl haben, dass es eine gute Ressource ist. Wir fangen ganz einfach an:

Führen Sie eine andere Aktion in einer anderen Aktion aus

In diesem Beispiel ist die Überschrift komplexer als die eigentliche Lektion. Wir verwenden einfach das, was in einer Aktion ist, und tun das Gleiche in einer anderen. Nutzen wir das Wissen, das wir letzte Woche über Instanzvariablen gewonnen haben, und wenden Sie es jetzt an. Zuerst erstellen wir eine neue Aktion namens "another_action". dann eine andere Aktion namens "Text". Wir werden dann die Aktion aus dem Text holen und in "another_action" einfügen. Wir werden dies beweisen, indem wir auf eine Instanzvariable in der Sicht "another_action" verweisen, die im Controller "text" zugewiesen wurde. Entschuldigung, wenn das keinen Sinn machte. Wenn Sie nicht bekommen haben, was ich gerade gesagt habe, schauen Sie sich den folgenden Code an, der Ihnen hoffentlich helfen wird:

 Klasse LearnController < ApplicationController def another_action text end def text @text = 'This text came from another action' end end

Wir erstellen dann eine Ansicht namens "another_action.html.erb", in der wir auf den Variablentext verweisen.

  Action Demo   <%= @text %>  

Erläuterung

Wie Sie sehen, haben wir auf die Aktion "Text" verwiesen, indem wir diese einfach in "another_action" einfügen. Dabei haben wir auch die Definition von "Text" übergeben, der Instanzvariablen. Um dieses Prinzip weiter zu verdeutlichen, lassen Sie uns dies in verschiedenen Situationen angeben, die alle funktionieren.

Situation 1- Festlegen einer Instanzvariablen, die einer Aktion entspricht

 Klasse LearnController < ApplicationController def another_action @text = text end def text misc_text = 'This text really traveled!' end end

Situation 1 Ergebnis

Situation 2 - Variable ersetzen

Jetzt werden wir noch komplexer:

 Klasse LearnController < ApplicationController def another_action @text = "text you'll never see" @text = text end def text wanted_text = overwrite_view end def overwrite_view overwrite_text = 'This text overwrote the original text' end end

Situation 2 Ergebnis

Dies ist die Reihenfolge der Ereignisse, die der folgende Code ausgeführt hat:

  • Gib der Instanzvariablen "text" einen Wert von "Text, den du nie sehen wirst"
  • Dann wurde es der Aktion "Text" erneut zugewiesen.
  • Die Variable "Text" hat jetzt den Wert des gewünschten lokalen Textes.
  • Die Want_text-Variable hat einen Wert der Aktion "overwrite_view".
  • Overwrite_view hat eine lokale Variable mit dem Wert "Dieser Text hat den ursprünglichen Text überschrieben".
  • Dies überträgt sich auf die Instanzvariable von @text.

Situation 3 Tragen Sie eine Variable

Wir werden das einfacher machen:

Klasse LearnController < ApplicationController def another_action @text = "text you'll never see" text end def text @text = 'This text overwrote the original text' end end


Situation 3 Ergebnis

Situation 4 Etwas Spezifisches zurückgeben

Klasse LearnController < ApplicationController def another_action @text = text end def text first = 'This text should not be passed to @text' second = 'This text would be put into the variable on default' return first end end

Dieses Beispiel ist besonders wichtig, da Sie jetzt etwas mehr Syntax lernen. das Rückkehr Befehl. Dadurch wird der Aktion mitgeteilt, was am Ende zurückgegeben werden soll.

Situation 4 Ergebnis

Rails Links

Jeder sollte bereits wissen, wie man einen normalen HTML-Link erstellt. (Verwenden von Text) Aber es gibt auch eine Möglichkeit, mit Rails zu arbeiten. Diese Methode ist nicht Ruby, sondern Teil des Frameworks. Sie können es jedoch nur in eingebetteten Ruby-HTML-Dateien verwenden, nicht in reinen rb-Dateien. Wie machen wir das? Hier ist der Code:

  Rails Link Demo   <%= link_to('Another Action Link', :controller => 'lernen',: action => 'another_action')%>  

Auf den ersten Blick fragen Sie sich vielleicht, warum Sie die Art und Weise ändern, in der Sie Links schreiben, insbesondere wenn der Ersatz länger dauert! Nun, ein Hauptgrund ist die Lesbarkeit. Sie können dies leicht lesen und wissen genau, worauf es verlinken wird. In Bezug auf die Länge ist der Teil: controller => nicht erforderlich, wenn Sie eine Verknüpfung zu einer Aktion innerhalb desselben Controllers herstellen.

Mit diesem Stück Schienencode sehen wir auch Symbole. Das ": Controller =>" ist ein Symbol. Wir werden später mehr darüber sprechen, was sie tun, aber im Moment erkennen Sie einfach den Doppelpunkt.

Rendering in Rails

Früher in dieser Serie haben wir ein wenig über die vernünftigen Standardwerte der Schienen gesprochen. Eine der Standardeinstellungen ist das Generieren einer Ansicht, die denselben Namen wie die Aktion in der entsprechenden Ansicht hat. Aber was wäre, wenn wir die Schienen automatisch überschreiben wollten? Dies ist eigentlich ziemlich einfach und eine sehr nützliche Technik. Wenn Sie an einem realen Projekt arbeiten, können Sie sich vorstellen, wie "klobig" Ihr Controller wird, wenn Sie für jede Seite eine eigene Ansicht und Aktion im Controller erstellen müssen. Rails hat jedoch eine Lösung, die Rendering genannt wird. Rendering Mit dieser Option können Sie festlegen, welche Ansicht für jede Aktion verwendet werden soll. Denken Sie jedoch daran, dass es sich bei Rail-Links auch um ausschließlichen Code und nicht um Ruby handelt, der nur für den Controller gedacht ist.

Wenn Sie dadurch etwas verwirrt sind, lassen Sie mich Ihnen zeigen, wie es geht. Dies wird hoffentlich etwas klarer werden. In diesem ersten Beispiel rendern wir die Aktion in der Ansicht, die sie normalerweise trotzdem wiedergibt. Mit anderen Worten, dieser Rendercode bewirkt nichts, was ohne ihn nicht passieren würde. Alles, was es tut, ist, etwas Code anzuzeigen, der normalerweise nur "angenommen" wird..

 def index render: action => 'index' end

Rendern einer Aktion in eine andere Ansicht

Das letzte Beispiel ist nicht wirklich nützlich, da das Ergebnis sowieso automatisch erzielt wird. Aber was wäre, wenn Sie eine wirklich erweiterte Ansicht für eine andere Aktion hätten und Sie dieselbe Ansicht für eine andere Aktion haben wollten? Es wäre nicht nur langwierig, für jede von Ihnen erstellte Aktion eine andere, identische Ansicht zu erstellen, sondern es wäre auch fast unmöglich zu aktualisieren! All dies kann jedoch behoben werden, indem jede ähnliche Aktion auf eine bestimmte Aktion gerendert wird. Untersuchen Sie den folgenden Code, den ich später erklären werde, und beachten Sie die verschiedenen Teile.

text_controller.rb:

 Klasse LearnController < ApplicationController def index render :action => 'text' end def text @text = 'Text'end def other @text ='Andere'render: action =>' text 'end end

text.html.erb:

   Rails-Rendering-Demo 

Willkommen zu <%= @text %> Seite

Erklärung des Codes:

Index-Aktion

Sie haben vielleicht bemerkt, dass ich eine Aktion namens "Index" hinzugefügt habe. Diese Aktion wird angezeigt, wenn Sie ein Verzeichnis zum Lernen aufrufen. Es funktioniert wie eine gewöhnliche Indexdatei. Sie müssen jedoch keine spezifische Aktion für den Index erstellen. Sie können auch das zuvor behandelte Thema verwenden, um eine andere Aktion zu erben.

Rendern in dieselbe Ansicht

Für dieses Beispiel benötigten wir nur eine Ansicht für alle Aktionen. und alle produzierten verschiedene Seiten. Für mich ist das ziemlich unglaublich für die Menge an Arbeit, die wir investieren.

Hinweis: Dies mag für einige offensichtlich sein, aber Vorsicht vor doppeltem Rendern. Doppelte Wiedergabe führt zu einem Fehler, da Sie versuchen, eine Aktion an zwei verschiedenen Stellen zu rendern. Kannst du an zwei Orten gleichzeitig sein? Nein, und auch keine Aktion. Wenn Sie sehen möchten, wie es aussieht, rendern Sie eine Aktion in zwei verschiedenen Ansichten. Wenn Sie komplexere Projekte durchführen, kann dies dazu führen, dass der Ablauf von Aktionen sehr komplex wird und Sie diesen Fehler versehentlich erzeugen.

Stellen Sie sicher, dass Sie das grundlegende Konzept des Renderns kennen, da dies eine sehr wichtige Technik ist, die Sie häufig als Schienenentwickler verwenden.

Aktion umleiten

Das Umleiten einer Aktion ähnelt dem Rendern einer Aktion insofern, als sie auch als Schienencode verwendet wird und nur im Controller verwendet wird. Außerdem beeinflusst es den Ablauf der Anwendung. Wie Sie dem Namen entnehmen können, können Sie mit der Umleitung… gut umleiten.

Sie werden möglicherweise überrascht sein, wie oft Sie den Befehl umleiten verwenden. Hier einige häufige Anwendungen:

  • Erstellen von Alias-Seiten
  • Durchführen einer Aktion in der Steuerung und Weiterleiten auf eine sekundäre Seite
  • Wenn ein Fehler auftritt, leiten Sie auf eine Fehlerseite um
  • Wenn der Benutzer nicht angemeldet ist, senden Sie ihn an eine Anmeldeseite

Genug Chit Chat, lass uns zum Code kommen! Für dieses Codebeispiel ändern wir nur den Controller des letzten Beispiels und lassen die Ansicht unverändert. Wie Sie sehen, ist die Umleitung im Format dem Rendern sehr ähnlich:

 Klasse LearnController < ApplicationController def index redirect_to :action => 'text' end def text @text = 'Text'redirect_to: action =>' other 'end def anderes Rendern: action =>' text 'end end

Gehen Sie nun zur Indexaktion in Ihrem Browser. Sie werden feststellen, dass Sie bei der anderen Aktion in Ihrer Adressleiste landen. Lassen Sie uns diesen Code durchgehen:

  • Zuerst leiten wir zum Aktionstext um. Wie beim Verknüpfen in Schienen können Sie auch einen Controller angeben, wenn Sie zu einem anderen Controller umleiten. Sie würden einfach vor der Aktion: controller => 'learn' setzen.
  • Der Browser geht jetzt zur Textaktion. Hier wird ein Wert für @text festgelegt. Der Browser hat jedoch keinen Wert für @text. Dies liegt daran, dass die Umleitung im Wesentlichen alles vergisst, was Sie in dieser Aktion sagen.
  • Wir werden jetzt zu anderen weitergeleitet. Hier rendern wir zur Textansicht.

Rendern oder Umleiten?

Es gibt zwar einige offensichtliche Szenarien, in denen Sie entweder Rendern oder Umleiten wählen würden. Es kann schwierigere Entscheidungen geben. Ein wichtiger Schlüssel ist jedoch, dass Sie eine Umleitung verwenden, wenn Sie Daten in eine Datenbank übermitteln oder etwas, das die Anwendung ändert. Andernfalls könnte eine Aktualisierung die Daten erneut senden.

Abschließende Gedanken

Ich hoffe, ihr habt viel aus dem Tutorial dieser Woche gelernt! Wir haben viele wichtige Konzepte behandelt. Wenn Sie also immer noch durch etwas verwirrt sind, lesen Sie es erneut. Nächste Woche werden wir uns wahrscheinlich mit der Ruby-Syntax beschäftigen!

Wie immer können Sie Fragen in den Kommentaren hinterlassen. Bitte digg diesen Artikel auch, wenn er Ihnen geholfen hat!