0
Ruby on Rails
Web Development that doesn‘t hurt
Dezember 2008



                          www.xing.com/profile/Christian_...
2
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 agenda
   • Ruby on Rails?!
   • Projekt: OnlineShop
   ...
Grundlagen
4
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Einordnung


        Java                               ...
5
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Entwicklung
   • David Heinemeier Hansson

   • Version ...
6
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Referenzprojekte




                                   ...
7
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 MVC - Paradigma

         Model                         ...
8
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 MVC - Paradigma




                                    ...
9
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Konvention statt Konfiguration


                       ...
10
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Konvention statt Konfiguration
  • models/order.rb

  •...
11
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 DRY-Prinzip
                                 Don‘t Repe...
Rails installieren
13
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Installation - Manuell


                              ...
14
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Installation – One-Click


                            ...
15
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Entwicklungsumgebung
   • TextMate


   • Aptana RadRai...
Startschuss
Projekt: OnlineShop
17
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Lokales Entwicklungssystem
   • InstantRails
   • NetBe...
18
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Neues Rails-Projekt anlegen

   1. Entwicklungsumgebung...
19
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Angelegte Verzeichnisstruktur
   • app/
        ▫   con...
20
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Umgebungseinstellungen
   • Entwicklungsumgebung (devel...
21
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Namenskonventionen
   •   variables_in_lower_case
   • ...
22
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Generatoren
   script/generate…
    …controller (Contro...
Anwendungs-Anforderungen
Projekt: OnlineShop
24
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Anwendungs-Anforderungen
   Shop benötigt:

           ...
25
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Grundgerüst einrichten

   1. Rechtsklick auf das Proje...
26
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Wooow, es läuft!
   1. Rechtsklick Project > Run
   2. ...
27
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Assoziation 1:n
                                       ...
28
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Assoziation 1:n - Methoden
                            ...
29
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Assoziation n:m
                                       ...
30
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Assoziation n:m - Methoden
                            ...
31
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Assoziation n:m - Verknüpfungstabelle

                ...
32
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Assoziationen
 person <> order

   Beziehung zwischen p...
33
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Assoziationen
 order <> item

   Beziehung zwischen ord...
34
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Anlegen der Migration für
 die Verknüpfungstabelle
   1...
35
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Ausführen der Migration

   1. Rechtsklick auf Projekt ...
36
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Rails Console
   • Zum Testen der Anwendung
   • Alle M...
37
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 People/Items anzeigen
   1. Rechtsklick Projekt > Rails...
38
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Order erstellen
   1. Ermitteln der Anzahl der
      Or...
39
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Person bearbeiten
   • Namen der Person austauschen
   ...
40
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Überprüfung der
 Zuweisungen

   1. Im Firefox-Menü auf...
41
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Wissenskasten
                   Generatoren



       ...
View
Benutzerschnittstelle
43
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger
44
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Wie funktionieren Views in Rails




                  ...
45
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Ordnerstruktur
46
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 ERB-Templates
   • <% Ruby-Code %>
        ▫ Ruby-Code ...
47
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 form_for(@objekt) do |f|
   • Werden Objekte übergeben ...
48
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 form_for(@order) do |f|
   • Select
             <%= f....
49
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 DropDown-Feld für Person in
 Orderform anlegen

   1. Ö...
50
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Items-Auswahl in Orderform
 anlegen

   1. Einfügen ein...
51
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Items in Order-Template
 „show“ ausgeben
• Öffnen von V...
52
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Wissenskasten
                    Generatoren          ...
53
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger
54
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger
Layouts/Partials
Don‘t repeat yourself…
56
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Partials
   • Auslagern/Wiederverwenden von Code
     i...
57
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Parameterübergabe an Partials
        <%= render :parti...
58
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Partial für Order new/edit
   1. Erstellen der Datei _f...
59
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Layout Konventionen
   • Layoutrahmen für
     gesamte ...
60
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Layout Aufbau
61
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Standard Helper Auswahl:
   • für Verlinkung           ...
62
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Eigene Helper
63
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Übungen
   • Layout mit Helper anlegen
        ▫ Die ei...
64
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Layout mit Helper anlegen
   1. Öffnen von views/layout...
65
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Währungsformatierung des
 Item-Preises
   1. Öffnen vie...
66
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Wissenskasten
                    Generatoren          ...
Controller
68
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Wie funktionieren Controller in Rails




             ...
69
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Vererbung

                                            ...
70
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Routing
                          http://localhost:3000...
71
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Anfragen empfangen/weiterleiten


                     ...
72
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Controller einrichten

   1. Anschauen, was bereits wie...
Businesslogik
…im Controller?
74
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Businesslogik: im Model!
   1. Öffne Models/order.rb
  ...
Webservices
76
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 RESTful Ansatz
   RESTful HTTP-Anfrage:

              ...
77
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Beispiel REST-Anfrage

   •   GET http://localhost:3000...
78
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 RESTful Rails
79
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Setzen und Abfragen von Cookies
   • Beispielcode:
    ...
80
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Setzen und Abfragen von Sessions
   • Session ist stand...
81
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Wissenskasten
                    Generatoren          ...
Zugabe
…weil Rails Spaß macht. Oder?
83
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Validatoren
84
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Validatoren

   •   validates_acceptance_of
   •   vali...
85
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Validatoren für Person
 anlegen
   1. Öffnen Models/per...
86
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Abhängigkeiten                                         ...
87
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Abhängigkeiten
   1. Öffnen Models/person.rb
   2. Eint...
88
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Wissenskasten
                    Generatoren          ...
89
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Wissenskasten
                    Generatoren          ...
90
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Diskussion
91
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Unsere Meinung




                                    ...
92
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Quellen
   • Morsy, Hussein; Otto, Tanja: Ruby on Rails...
Upcoming SlideShare
Loading in...5
×

Ruby On Rails - 2. Rails Introduction

5,521

Published on

A 180 min introduction on Ruby on Rails programming with hands-on exercises by Christian Feser, Michael Kram, Jakob Schröter and Marc Seeger

Contents:
Ruby On Rails Framework
MVC Pattern
Sample Project: OnlineShop
Associations
Migrations
Views
ERB-Templates
Layouts/Partials
Helper
Controller
Webservices
Validators

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,521
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
101
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Transcript of "Ruby On Rails - 2. Rails Introduction"

  1. 1. Ruby on Rails Web Development that doesn‘t hurt Dezember 2008 www.xing.com/profile/Christian_Feser www.xing.com/profile/Michael_Kram www.xing.com/profile/Jakob_Schroeter www.Marc-Seeger.de
  2. 2. 2 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger agenda • Ruby on Rails?! • Projekt: OnlineShop ▫ Datenmodell ▫ Views ▫ Controller • Diskussion
  3. 3. Grundlagen
  4. 4. 4 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Einordnung Java Ruby PHP Rails CakePHP Spring Merb Symfony Struts Sinatra Zend … … …
  5. 5. 5 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Entwicklung • David Heinemeier Hansson • Version 1.0: 2005 • Version 2.0: 2007 • Aktuell Version: 2.2.2
  6. 6. 6 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Referenzprojekte http://rails100.pbwiki.com/
  7. 7. 7 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger MVC - Paradigma Model View Controller Active Action Action Record View Controller
  8. 8. 8 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger MVC - Paradigma http://wiki.rubyonrails.org/rails/pages/UnderstandingRailsMVC
  9. 9. 9 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Konvention statt Konfiguration Ordner- struktur Namens- gebung
  10. 10. 10 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Konvention statt Konfiguration • models/order.rb • views/orders/index.html.erb • controllers/orders_controller.rb • Tabelle: orders
  11. 11. 11 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger DRY-Prinzip Don‘t Repeat Yourself Don‘t Repeat Yourself Don‘t Repeat Yourself Don‘t Repeat Yourself Don‘t Repeat Yourself
  12. 12. Rails installieren
  13. 13. 13 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Installation - Manuell 1 • Ruby installieren 2 • RubyGems installieren 3 • Rails installieren „gem install rails“ http://www.rubyonrails.org/down
  14. 14. 14 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Installation – One-Click 1 • InstantRails installieren http://instantrails.rubyforge.org
  15. 15. 15 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Entwicklungsumgebung • TextMate • Aptana RadRails (stand-alone/eclipse plugin) • NetBeans
  16. 16. Startschuss Projekt: OnlineShop
  17. 17. 17 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Lokales Entwicklungssystem • InstantRails • NetBeans IDE • Firefox Extensions „SQLite Manager“ und „Firebug“ • Verknüpfung zu Rails API Docs • Verknüpfung zu InstantRails Verzeichnis
  18. 18. 18 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Neues Rails-Projekt anlegen 1. Entwicklungsumgebung NetBeans starten 2. Im Menü File > New Project 3. „Ruby on Rails Application“ auswählen 4. Projektname „OnlineShop“ vergeben 5. Database Adapter „sqlite3“ auswählen (kein Username, Password) 6. Rails Version 2.2.2 wählen
  19. 19. 19 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Angelegte Verzeichnisstruktur • app/ ▫ controller/ ▫ helpers/ ▫ models/ ▫ views/ • config/ • db/ • public/ ▫ images ▫ javascripts ▫ stylesheets •…
  20. 20. 20 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Umgebungseinstellungen • Entwicklungsumgebung (development) ▫ Ausführliche Fehlermeldungen, Caching deaktiviert, ignoriert E-Mail-Versand • Produktionsumgebung (production) ▫ Allgemeine Fehlermeldungen, Caching aktiviert • Testumgebung (test) ▫ zum Ausführen von Testklassen, ausführliche Fehlermeldungen, Caching deaktiviert
  21. 21. 21 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Namenskonventionen • variables_in_lower_case • :symbol (nur ein Verweis auf einen String) • ClassName • ModuleName • tables_names (im Plural) • Englische Bezeichnungen
  22. 22. 22 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Generatoren script/generate… …controller (Controller, Views, Helper) …migration (Migration-Datei für DB Update) …model (Migration-Datei für Tabellenerstellung) …resource (leeres Model, leerer Controller) …scaffold (Model, Migration, Controller + Actions, Views) script/destroy…
  23. 23. Anwendungs-Anforderungen Projekt: OnlineShop
  24. 24. 24 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Anwendungs-Anforderungen Shop benötigt: People Items Orders
  25. 25. 25 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Grundgerüst einrichten 1. Rechtsklick auf das Projekt > Generate… 2. Auswahl „scaffold“ 3. Modelname (im Singular) eingeben und Angabe der Attribute mit field:type ▫ Types: string, text, integer, float, decimal, datetime, timestamp, time, date, binary, boolean ▫ a) person - firstname:string lastname:string age:integer ▫ b) item - name:string price:decimal ▫ c) order - person_id:integer 4. Rechtsklick auf Projekt > Migrate Database > To Current Version
  26. 26. 26 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Wooow, es läuft! 1. Rechtsklick Project > Run 2. Im Browser aufrufen 1. http://localhost:3000/people 2. http://localhost:3000/items 3. Mehreren Personen und Items anlegen 4. Im Browser aufrufen 1. http://localhost:3000/orders 5. Im Firefox-Menü auf Extras > SQLite Manager ▫ Überprüfen welche Tabellen automatisch angelegt wurden ->V1
  27. 27. 27 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Assoziation 1:n n 1 Person Order • Person benötigt einen Primärschlüssel und has_many :orders Deklaration • Order benötigt einen Fremdschlüssel person_id und belongs_to :person Deklaration
  28. 28. 28 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Assoziation 1:n - Methoden n 1 Person Order • orders • person • orders << • person= • orders.create • build_person • orders.build • create_person • orders= • person.nil? • orders.find • orders.size • orders.emtpy? • orders.delete
  29. 29. 29 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Assoziation n:m m n Order Item • Order benötigt einen Primärschlüssel und has_and_belongs_to_many :items Deklaration • Item benötigt einen Primärschlüssel und has_and_belongs_to_many :orders Deklaration
  30. 30. 30 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Assoziation n:m - Methoden m n Order Item • items • orders • items << • orders << • items.create • orders.create • items.build • orders.build • items = • orders= • items.find • orders.find • items.size • orders.size • items.emtpy? • orders.emtpy? • items.delete • orders.delete
  31. 31. 31 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Assoziation n:m - Verknüpfungstabelle m n Order Item • Tabelle mit Fremdschlüsseln: ▫ item_id ▫ order_id • Name der Verknüpfungstabelle (alphabetisch!): ▫ items_orders
  32. 32. 32 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Assoziationen person <> order Beziehung zwischen person <> order modellieren 1. In NetBeans das Model für „person“ öffnen has_many :orders 2. In NetBeans das Model für „order“ öffnen belongs_to :person V1->
  33. 33. 33 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Assoziationen order <> item Beziehung zwischen order <> item modellieren 1. In NetBeans das Model für „order“ öffnen has_and_belongs_to_many :items 2. In NetBeans das Model für „item“ öffnen has_and_belongs_to_many :orders
  34. 34. 34 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Anlegen der Migration für die Verknüpfungstabelle 1. Rechtsklick Projekt > Generate 2. Migration Generator auswählen ▫ Arguments: CreateJoinItemsOrders 3. In der Migrationsdatei nun unter self.up create_table :items_orders, :id => false do |t| t.integer :item_id t.integer :order_id end 4. In der Migrationsdatei nun unter self.down drop_table :items_orders
  35. 35. 35 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Ausführen der Migration 1. Rechtsklick auf Projekt > Migrate Database > To Current Version 2. Neustart des Servers nach Datenbankänderung 3. Im Firefox-Menü auf Extras > SQLite Manager ▫ Überprüfen welche Tabellen automatisch angelegt wurden
  36. 36. 36 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Rails Console • Zum Testen der Anwendung • Alle Methoden, Klassen und Objekte der Anwendung sind verfügbar
  37. 37. 37 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger People/Items anzeigen 1. Rechtsklick Projekt > Rails Console 2. Ermitteln der Anzahl der Item-Objekte Item.count 3. Ausgabe eines Item-Objekts mit Methode find Item.find(1) Item.find(1,2) Item.find(:all) Item.find(:all, :conditions => quot;name = 'XYZ' quot;) Item.find(:all, :order => quot;created_at DESCquot;) Item.find_by_name, Item.find_by_price
  38. 38. 38 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Order erstellen 1. Ermitteln der Anzahl der Order-Objekte Order.count 2. Erstellen einer Order und zwischenspeichern order = Order.new order.person = Person.find(1) order.items << Item.find(1, 3) 3. Anzeigen der Order order 4. Anzeigen der zugeordneten Items order.items 5. Speichern in Datenbank order.save
  39. 39. 39 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Person bearbeiten • Namen der Person austauschen person = Person.find(1) person.firstname = quot;NeuerNamequot; person.save person.update_attribute(:firstname, quot;NeuerNamequot;)
  40. 40. 40 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Überprüfung der Zuweisungen 1. Im Firefox-Menü auf Extras > SQLite Manager öffnen ▫ Überprüfen welche Einträge in Tabelle items_orders angelegt wurden ->V2
  41. 41. 41 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Wissenskasten Generatoren Model Assoziationen Console Migrations
  42. 42. View Benutzerschnittstelle
  43. 43. 43 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger
  44. 44. 44 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Wie funktionieren Views in Rails http://wiki.rubyonrails.org/rails/pages/UnderstandingRailsMVC
  45. 45. 45 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Ordnerstruktur
  46. 46. 46 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger ERB-Templates • <% Ruby-Code %> ▫ Ruby-Code wird innerhalb dieser Tags ausgewertet • <%= Ruby-Code %> ▫ Code wird ausgewertet und das Resultat als String ausgegeben • <%- Ruby-Code %> ▫ Code wird ausgewertet, jedoch nichts ausgegeben (kein Zeilenumbruch) • <%# Ruby-Code %> ▫ Auskommentierter Ruby-Code
  47. 47. 47 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger form_for(@objekt) do |f| • Werden Objekte übergeben die im Controller gefüllt werden. • Einzeilige Textfelder • Weitere: <%= f.text_field :firstname %> f.password_field • Mehrzeilige Textfelder f.check_box <%= f.text_area :firstname %> f.radio_button • Button f.file_field <%= f.submit quot;Submitquot; %> f.hidden_field • Beschriftung (Label) <%= f.label :firstname %>
  48. 48. 48 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger form_for(@order) do |f| • Select <%= f.select :person_id, Person.find(:all).collect {|p| [p.firstname+quot; quot;+p.lastname, p.id]} %> • HTML-Ausgabe: <select id=quot;order_person_idquot; name=quot;order[person_id]quot;> <option value=quot;1quot;>Hans Wurst</option> <option value=quot;2quot;>Gabi Schnabel</option> <option value=quot;5quot;>Helga Wacken</option> </select>
  49. 49. 49 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger DropDown-Feld für Person in Orderform anlegen 1. Öffnen von Views/orders/new.html.erb 2. Ersetzen des text_fields der person_id durch einen select-Feld: <%= f.select :person_id, Person.find(:all) %> 3. Ergebnis prüfen: http://localhost:3000/orders/new 4. Erweiterung im Template durchführen: <%= f.select :person_id, Person.find(:all).collect {|p| [p.firstname+quot; quot;+p.lastname, p.id]} %> V2->
  50. 50. 50 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Items-Auswahl in Orderform anlegen 1. Einfügen eines Mehrfach-Auswahlfeldes: <p> <%= f.label :item_ids, 'Items'%> <br /> <%= f.collection_select :item_ids, Item.find(:all), :id, :name, {}, :multiple => true, :name => 'order[item_ids][]' %> </p> 2. Ergebnis prüfen: http://localhost:3000/orders/new
  51. 51. 51 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Items in Order-Template „show“ ausgeben • Öffnen von Views/orders/show.html.erb • Hinzufügen von Person-Feldern <%=h @order.person.firstname %> <%=h @order.person.lastname %> • Hinzufügen von Item-Feldern <%for item in @order.items %> <%=h item.name %> <%=h item.price %><br /> <%end%> ->V3
  52. 52. 52 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Wissenskasten Generatoren Views ERB-Templates Model Assoziationen Console Forms Migrations Abhängigkeiten
  53. 53. 53 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger
  54. 54. 54 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger
  55. 55. Layouts/Partials Don‘t repeat yourself…
  56. 56. 56 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Partials • Auslagern/Wiederverwenden von Code in Templates • Namenskonvention: _form.html.erb • Aufruf mit <% render :partial => quot;formquot; %> new.html.erb edit.html.erb _form.html.erb render: render: partial partial
  57. 57. 57 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Parameterübergabe an Partials <%= render :partial => quot;formquot;, :locals => {:submit_text => quot;Changequot;} %> edit.html.erb _form.html.erb render: partial
  58. 58. 58 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Partial für Order new/edit 1. Erstellen der Datei _form.html.erb im Verzeichnis /views/orders 2. Formularcode aus new.html.erb in _form.html.erb kopieren 3. Variable submit_text statt der Buttonbeschriftung „Create“ einsetzen 4. Im New/Edit Template <%= render :partial => quot;formquot;, :locals => {:submit_text => quot;Buttontextquot;} %> V3 ->
  59. 59. 59 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Layout Konventionen • Layoutrahmen für gesamte Seite bzw. Seitengruppen • Beinhaltet HTML controller1/edit Grundgerüst controlle r3/index
  60. 60. 60 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Layout Aufbau
  61. 61. 61 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Standard Helper Auswahl: • für Verlinkung • Entfernung von HTML Code ▫ link_to ▫ sanitize ▫ button_to ▫ html_escape (<%=h…) ▫ mail_to ▫ strip_links ▫ image_tag ▫ strip_tags • für Einbinden von Stylesheets und • Sonstige Helper JavaScripts ▫ cycle ▫ stylesheet_link_tag ▫ javascript_include_tag • Zahlenformatierung ▫ number_to_currency ▫ number_with_delimiter ▫ number_to_human_size ▫ number_to_percentage • Textmanipulation ▫ excerpt ▫ highlight ▫ truncat ▫ word_wrap ▫ pluralize
  62. 62. 62 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Eigene Helper
  63. 63. 63 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Übungen • Layout mit Helper anlegen ▫ Die einzelnen Layouts die in views/layout liegen durch ein Anwendungsweites Layout (application.html.erb) ersetzen. ▫ In dieses neue Layout eine einfache Navigationsleiste einfügen. Diese soll es ermöglichen in jedem View zu der Index-Seite von People, Orders, Items zu navigieren. ▫ Diese Verlinkung soll mithilfe des link_to-Helpers realisiert werden. • Währungsformatierung des Item-Preises ▫ Die Ausgaben des Preises in der Items-Liste soll mithilfe des number_to_currency Helpers realisiert werden.  Infos siehe Rails API Docs (link auf Desktop) suchen nach link_to bzw. number_to_currency V3->
  64. 64. 64 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Layout mit Helper anlegen 1. Öffnen von views/layout/orders.html.erb 2. Einfügen der Navigationslinks: <=% link_to quot;Peoplequot;, people_path %> | <=% link_to quot;Itemsquot;, items_path %> | <=% link_to quot;Ordersquot;, orders_path %> 3. Ergebnis prüfen: ▫ http://localhost:3000/orders ▫ http://localhost:3000/people ▫ http://localhost:3000/items 4. Umbenennen der orders.html.erb in application.html.erb und löschen der anderen Layoutdateien
  65. 65. 65 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Währungsformatierung des Item-Preises 1. Öffnen views/items/index.html.erb 2. Preisausgabe verändern <%=h number_to_currency(item.price, :unit => '€ ', :separator => ',', :delimiter => '.') %> ->V4
  66. 66. 66 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Wissenskasten Generatoren Views Businesslogik Helper ERB-Templates Model Assoziationen Console Validatoren Forms Routing REST Migrations Partial Layout Controller Webservices Abhängigkeiten
  67. 67. Controller
  68. 68. 68 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Wie funktionieren Controller in Rails http://wiki.rubyonrails.org/rails/pages/UnderstandingRailsMVC
  69. 69. 69 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Vererbung ActionController::Base ApplicationController OrdersController PeopleController ItemsController
  70. 70. 70 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Routing http://localhost:3000/orders/edit/1 URL map.connect ‘controller/:action/:id‘ routes.rb class OrdersController < ApplicationController def index … end def edit Controller @order = Order.find(params[:id]) end end … <% form_for(@order) do |f| %> View …. <%end>
  71. 71. 71 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Anfragen empfangen/weiterleiten OrdersController show new edit create update destroy index index.html.erb show.html.erb new.html.erb edit.html.erb ( render bzw. redirect_to )
  72. 72. 72 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Controller einrichten 1. Anschauen, was bereits wie funktioniert 2. Fertig ;-)
  73. 73. Businesslogik …im Controller?
  74. 74. 74 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Businesslogik: im Model! 1. Öffne Models/order.rb 2. Methode definieren: 12 def total_price items.sum(:price) end 3. Öffne Views/orders/show.html.erb Total Price: <%= @order.total_price %> V4->
  75. 75. Webservices
  76. 76. 76 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger RESTful Ansatz RESTful HTTP-Anfrage: HTTP-Methode Ressource (URL) HTTP GET URL Fordert die Ressource an POST URL Legt eine neue Ressource an PUT URL Ändert die angegebene Ressource DELETE URL Löscht die angegebene Ressource
  77. 77. 77 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Beispiel REST-Anfrage • GET http://localhost:3000/people/1 • POST http://localhost:3000/people • PUT http://localhost:3000/people/3 • DELETE http://localhost:3000/people/2 Demo im Client
  78. 78. 78 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger RESTful Rails
  79. 79. 79 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Setzen und Abfragen von Cookies • Beispielcode: Cookies[:user_id] = { :value => ‚8‘ :expires => 2.hours.form_now} • Optionen: value, path, domain, expires, secure, http_only V4->
  80. 80. 80 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Setzen und Abfragen von Sessions • Session ist standardmäßig immer aktiviert • Beispielcode: session[:user_id] = user.id • Session-Management kann für einzelne Controller deaktiviert werden Class InfoController < ApplicationController session :off end
  81. 81. 81 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Wissenskasten Generatoren Views Businesslogik Helper ERB-Templates Model Assoziationen Console Validatoren Forms Routing REST Migrations Partial Layout Controller Webservices Abhängigkeiten
  82. 82. Zugabe …weil Rails Spaß macht. Oder?
  83. 83. 83 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Validatoren
  84. 84. 84 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Validatoren • validates_acceptance_of • validates_associated • validates_confirmation_of • validates_exclusion_of • validates_inclusion_of ActiveRecord::Base • validates_format_of • validates_length_of Person Item Order • validates_size_of • validates_numericality_of • validates_presence_of • validates_uniqueness_of • validates_each
  85. 85. 85 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Validatoren für Person anlegen 1. Öffnen Models/person.rb 2. Eintragen der Validatoren validates_presence_of :firstname, :lastname validates_numericality_of :age, :greater_than => 17, :only_integer => true 3. Testen der Validierung im View http://localhost:3000/people 4. Testen der Validierung über Console p1 = Person.find(1) p1.age = 3 p1.save V4->
  86. 86. 86 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Abhängigkeiten Item Item Person Order Item • Können im Model mit den Assoziationen definiert werden. ▫ :dependent => :nullify (Standard) ▫ :dependent => :destroy ▫ :delete_all
  87. 87. 87 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Abhängigkeiten 1. Öffnen Models/person.rb 2. Eintragen der Abhängigkeit has_many :orders, :dependent => :destroy 3. Testen der Abhängigkeit ▫ Durch Löschen einer Person http://localhost:3000/people ▫ Überprüfung der Verknüpfungstabelle im SQLite Manager in Firefox
  88. 88. 88 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Wissenskasten Generatoren Views Businesslogik Helper ERB-Templates Model Assoziationen Console Validatoren Forms Routing REST Migrations Partial Layout Controller Webservices Abhängigkeiten
  89. 89. 89 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Wissenskasten Generatoren Views Businesslogik Helper ERB-Templates Model Assoziationen Console Validatoren Forms Routing REST Migrations Partial Layout Controller Webservices Abhängigkeiten
  90. 90. 90 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Diskussion
  91. 91. 91 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Unsere Meinung ->V5
  92. 92. 92 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Quellen • Morsy, Hussein; Otto, Tanja: Ruby on Rails 2 – Das Entwickler-Handbuch (2008): Galileo Press • Fischer, Jens-Christian: Professionelle Webentwicklung mit Ruby on Rails 2 (2008): mitp • Marinschek, Martin; Radinger, Wolfgang; Ruby on Rails: Einstieg in die effiziente Webentwicklung (2006): Dpunkt Verlag • Wartala, Ramon; Krutisch, Jan: Webanwendungen mit Ruby on Rails (2007): Addision-Wesley Verlag • Orsini, Rob: Rails Kochbuch (2007): O‘Reilly Verlag • http://api.rubyonrails.org/ Übungsbild: http://rubyonrailsprogrammingguide.com/basics/why-ruby-on- rails-part-2/
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×