Websiteentwicklung: Ruby on Rails: Controller und View
Wie spielen Controller und View zusammen?
Controller
[Bearbeiten]Den Controller haben wir hier schon kurz besprochen.
Views
[Bearbeiten]Datensatz anzeigen mit show
[Bearbeiten]Die View von show verwendet ganz einfaches Embedded Ruby:
<% befehl %>
Mit dieser Schreibweise kann man gut Verzweigungen und Schleifen schreiben:
<% if @hallo.von == 'Brigitte' then %> <p>die böse Brigitte!</p> <% else %> ... <% end %>
Mit einem istgleich-Zeichen kann man etwas ausgeben
<%= variable %>
Achtung: Rails nimmt an, dass die Variable vielleicht Daten enthält, die von Usern eingegeben wurden, und dass diese Daten noch HTML, CSS, Javascript enthalten könnten. Deswegen wird automatisch ein html-escaping durchgefürht:
<%= variable mit html %>
Das sieht zum Beispiel so aus:
<%= 'User sagte <script>alert("peng")</script>' %>
wird zu
User sagte <script>alert("peng")</script>
und damit harmlos: das Javascript wird nicht mehr ausgeführt, sondern nur lesbar angezeigt.
Datensätze auflisten mit index
[Bearbeiten]Für das Auflisten braucht mein eine Schleife: alle Meldungen sind im Array @hallos gespeichert.
<% @hallos.each do |hallo| %> hier passiert was mit hallo <% end %>
Eingabeformular new (und edit)
[Bearbeiten]Das Eingabe- und Bearbeitungsformular sieht sehr einfach aus, ist aber komplex. Der Form-Tag wird von folgender Konstruktion erzeugt:
<% form_for(@hallo) do |f| %> .... <% end %>
Innerhalb dieses Tags kann man dann label und Eingabefelder verwenden.
<p> <%= f.label :meldung %><br /> <%= f.text_area :meldung %> </p>
Dazu gibt es einen Rails Guide [1] Internationalization |
Das Argument für den Befehl label ist der Name der Datenbankspalte als Symbol. Dieser Name der Spalte wird in eine menschenlesbare Form gebracht und eventuell übersetzt (diese Vorkehrungen für Übersetzung nennt man allgemein 'Internationalisierung').
Die text_area bezieht sich auf die Eigenschaft meldung des Objekts. Beim Bearbeitungsformular wird hier also der aktuelle Wert angezeigt, bevor er verändert werden kann. Wird das Formular eingeschickt, ohne dass die Daten gespeichert werden können, dann bleiben hier die Eingaben erhalten.
Dazu gibt es einen Rails Guide [2] Form Helpers Guide |
Neben dem text_field und der text_area gibt es auch noch weitere Eingabefelder (check_box, file_field, hidden_field, password_field, radio_button).
- ↑ Rails Guide Internationalization
- ↑ Rails Guide Form Helpers Guide
- ↑ Rails API Rails API: FormHelper