Ruby On Rails - 2. Rails Introduction

5,977 views

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,977
On SlideShare
0
From Embeds
0
Number of Embeds
56
Actions
Shares
0
Downloads
103
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

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/

×