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!
Wenn Sie die Teile 1 und 2 nicht gelesen haben, sollten Sie diese unbedingt durchlesen, bevor Sie mit diesem Tutorial fortfahren.
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:
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.
Klasse LearnController < ApplicationController def another_action @text = text end def text misc_text = 'This text really traveled!' end end
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
Dies ist die Reihenfolge der Ereignisse, die der folgende Code ausgeführt hat:
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
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.
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.
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
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
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.
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:
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:
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.
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!