Ruby on Rails SS09 05

978 views

Published on

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

  • Be the first to like this

No Downloads
Views
Total views
978
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide




























































  • Ruby on Rails SS09 05

    1. 1. Daniel Dengler web developer Ruby on Rails Workshop SS 2009 „Ruby on Rails“ and the Rails-Logo are registered trademarks of David Heinemeier Hansson – www.rubyonrails.org
    2. 2. 5 Ruby on Rails Eine erste Anwendung (2)
    3. 3. Komponenten • ActionController • ActionView • ActiveRecord • ActionMailer • ActiveResource • ActiveSupport • Railties
    4. 4. Komponenten • ActionController • ActionView • ActiveRecord • ActionMailer • ActiveResource • ActiveSupport • Railties
    5. 5. Komponenten • ActionController ActionPack • ActionView • ActiveRecord • ActionMailer • ActiveResource • ActiveSupport • Railties
    6. 6. MVC Rails
    7. 7. MVC Rails ActionPack
    8. 8. Einen Controller erstellen script/generate controller ControllerName actions Anmerkungen zu script/generate: • script/generate ohne Argumente zeigt alle aktuell verfügbaren Generatoren • script/generate Generator zeigt die verfügbaren Parameter des jeweiligen Generators
    9. 9. Einen Controller erstellen script/generate controller Home index imprint Datei: app/controllers/home_controller.rb class HomeController < ApplicationController def index end def imprint end end
    10. 10. Einen Controller löschen script/destroy controller ControllerName Anmerkungen zu script/destroy: • führt das Löschen ohne weitere Rüchfragen durch!
    11. 11. Aufgaben von Controllern • steuern die Anwendung • können Daten unter Verwendung von ActiveRecord verändern • bereiten Daten für die Darstellung (den View) vor • entscheiden, welcher View gezeigt werden soll
    12. 12. Aufgaben von Views • zeigen die vom Controller erhaltenen Daten im gewünschten Format an • enthalten Verweise zu anderen Controllern bzw. deren Actions (Methoden im Controller) • ermöglichen die Eingabe von Daten
    13. 13. Aufgaben von Helpern können häu ger verwendete Funktionalität für Views bereitstellen Beispiele: • kleines Benutzerpro l, welches an mehreren Stellen der Anwendung gebraucht wird • Abkürzungen für Einfügungen wie etwa icon(:edit) an Stelle von image_tag(quot;icons/edit.pngquot;)
    14. 14. Actions in Controllern Jede öffentliche (public) Methode eines Controllers ist von außen über den Browser erreichbar und stellt eine Action dar Wie im Internet üblich, wird als Standardaktion die Methode index aufgerufen, falls diese existiert
    15. 15. Grundlegende Funktionen von Controllern redirect_to leitet die aktuelle Anfrage an eine andere URL weiter render gibt etwas im Browser aus, das nicht der Konvention entspricht. Konvention für Views, falls nicht mit einer der obigen Funktionen etwas anderes bestimmt wurde: • Der Name des auszugebenden Views entspricht dem Namen der aktuellen Action im Ordner des aktuellen Controllers
    16. 16. Etwas zurückgeben class HomeController < ApplicationController # URLs: # /home # /home/index def index render :nothing => true Nichts ausgeben end # URL: /home/imprint def imprint render :text => quot;imprintquot; Text ausgeben end end
    17. 17. Etwas zurückgeben class HomeController < ApplicationController # Gibt das Template der Methode imprint zurück # Achtung: die Methode selbst wird hierbei NICHT ausgeführt! def index Action Template ausgeben render :imprint end # Gibt das template /apps/views/home/imprint.html.erb zurück def imprint Action Template implizit ausgeben end end
    18. 18. Den Besucher weiterleiten class HomeController < ApplicationController # Leitet den Beutzer an die Action imprint weiter def index redirect_to :action => quot;imprintquot; end # Gibt das template /apps/views/home/imprint.html.erb zurück def imprint end end
    19. 19. convention over con guration
    20. 20. RHTML Templates <% %> wird verwendet um Ruby Code in RHTML Templates einzubetten <%= %> wird verwendet um Ruby Code in RHTML Templates auszugeben RHTML Templates werden im Ordner views in den Unterordnern des jeweiligen Controllers unter dem Namen der aktuellen Action gesucht (z.B. views/home/index.html.erb)
    21. 21. Grundlegende Funktionen von RHTML Views • link_to stellt Verknüpfungen her • h codiert HTML Zeichen um das einschleusen fremder Tags zu verhindern • render erlaubt die Ausgabe von Subtemplates / Partials
    22. 22. Grundlegende Funktionen von RHTML Views # controllers/home_controller.rb class HomeController < ApplicationController def index @projects = [quot;onequot;, quot;twoquot;] end def imprint end end # views/home/index.html.erb <ul> <% @projects.each do |project| %> <li><%= project %></li> <% end %> </ul> <p> <%= link_to quot;textquot;, :action => quot;imprintquot; %> </p>
    23. 23. Grundlegende Funktionen von RHTML Views # controllers/home_controller.rb class HomeController < ApplicationController def index @projects = [quot;onequot;, quot;twoquot;] end def imprint end end # views/home/index.html.erb <%= render :partial => 'projects', :locales => { :projects => @projects } %> <p> <%= link_to quot;textquot;, :action => quot;imprintquot; %> </p> # views/home/_projects.html.erb <ul> <% projects.each do |project| %> <li><%= project %></li> <% end %> </ul>
    24. 24. Komponenten • ActionController • ActionView • ActiveRecord • ActionMailer • ActiveResource • ActiveSupport • Railties
    25. 25. Komponenten • ActionController • ActionView • ActiveRecord • ActionMailer • ActiveResource • ActiveSupport • Railties
    26. 26. MVC Rails
    27. 27. MVC Rails
    28. 28. Aufgaben von Modellen • kümmern sich um die Datenhaltung • enthalten die Datenlogik der Anwendung • sorgen für eine konsistente Datenhaltung • erlauben die vereinfachten Zugriff auf die Daten, ohne sich mit SQL näher beschäftigen zu müssen
    29. 29. Crash-Kurs Datenbanken (1) Tabelle: projects created_at updated_at id (int) title (string) (datetime) (datetime) 1 Blog 1241387013 1241387013 2 Welteroberung 1241387044 1241387044 Diese Kurs 3 1241387048 1241387048 bestehen
    30. 30. Crash-Kurs Datenbanken (1) Tabelle: projects created_at updated_at id (int) title (string) (datetime) (datetime) Zeile 1 Blog 1241387013 1241387013 2 Welteroberung 1241387044 1241387044 Diese Kurs 3 1241387048 1241387048 bestehen
    31. 31. Crash-Kurs Datenbanken (1) Tabelle: projects created_at updated_at id (int) title (string) (datetime) (datetime) Modell 1 Blog 1241387013 1241387013 Instanz 2 Welteroberung 1241387044 1241387044 Diese Kurs 3 1241387048 1241387048 bestehen
    32. 32. Crash-Kurs Datenbanken (1) Tabelle: projects created_at updated_at id (int) title (string) (datetime) (datetime) 1 Blog 1241387013 1241387013 2 Welteroberung 1241387044 1241387044 Diese Kurs 3 1241387048 1241387048 bestehen Abfragesprache (SQL): SELECT * FROM projects WHERE id = 1;
    33. 33. Crash-Kurs Datenbanken (1) Tabelle: projects created_at updated_at id (int) title (string) (datetime) (datetime) 1 Blog 1241387013 1241387013 2 Welteroberung 1241387044 1241387044 Diese Kurs 3 1241387048 1241387048 bestehen Abfragesprache (SQL): SELECT * FROM projects WHERE id = 1;
    34. 34. Crash-Kurs Datenbanken (1) Tabelle: projects created_at updated_at id (int) title (string) (datetime) (datetime) 1 Blog 1241387013 1241387013 2 Welteroberung 1241387044 1241387044 Diese Kurs 3 1241387048 1241387048 bestehen Abfragesprache Ruby (mittels ActiveRecord): Project. nd(1)
    35. 35. Ein Model erstellen script/generate model ModelName attributes Löschen erfolgt analog zum Controller mit script/ destroy model
    36. 36. Migrations • In Migrations werden Änderungen an der Datenbankstruktur im zeitlichen Verlauf festgehalten • Migrations sind unabhängig von den eigentlichen Datenmodellen • Im Idealfall auszuführen auf einem Datenbanksystem mit einer Transactional Data De nition Language, da andernfalls Fehler die Datenbankstruktur zerstören könnten
    37. 37. Migrations ActiveRecord Migration ActiveRecord ist unabhängig von den Migrations
    38. 38. Migrations ActiveRecord Migration ActiveRecord ist unabhängig von den Migrations
    39. 39. Migrations ActiveRecord Migration DB Die Migrations de nieren die Datenbankstruktur, die von ActiveRecord genutzt wird
    40. 40. Migration (up) Migration t1 Projekt- Modell erstellen
    41. 41. Migration (up) Migration Migration t1 t2 Projekt- Aufgaben- Modell Modell erstellen erstellen
    42. 42. Migration (up) Migration Migration Migration t1 t2 t3 Projekt- Aufgaben- Projekt- Modell Modell Modell erstellen erstellen ändern
    43. 43. Migration (down) Migration Migration Migration t1 t2 t3 Projekt- Aufgaben- Projekt- Modell Modell Modell erstellen erstellen ändern
    44. 44. Migration (down) Migration Migration Migration t1 t2 t3 Projekt- Aufgaben- Projekt- Modell Modell Modell erstellen erstellen ändern
    45. 45. Migration (down) Migration Migration t1 t2 Projekt- Aufgaben- Modell Modell erstellen erstellen
    46. 46. Einsatz von Migrations Migration Migration Migration Entwickler 1 t1 t2 t3 Migration Migration Migration Entwickler 2 t1 t2 t3 Migration Migration Migration Produktivsystem t1 t2 t3
    47. 47. Einsatz von Migrations Migration Migration Migration Entwickler 1 t1 t2 t3 Migration Migration Migration Entwickler 2 t1 t2 t3 Migration Migration Migration Produktivsystem t1 t2 t3
    48. 48. Einsatz von Migrations Migration Migration Migration Entwickler 1 t1 t2 t3 Migration Migration Migration Entwickler 2 t1 t2 t3 Migration Migration Migration Produktivsystem t1 t2 t3
    49. 49. Einsatz von Migrations Migration Migration Migration Entwickler 1 t1 t2 t3 Migration Migration Migration Entwickler 2 t1 t2 t3 Migration Migration Migration Produktivsystem t1 t2 t3
    50. 50. Einsatz von Migrations Migration Migration Migration Entwickler 1 t1 t2 t3 Migration Migration Migration Entwickler 2 t1 t2 t3 Migration Migration Migration Produktivsystem t1 t2 t3
    51. 51. Einsatz von Migrations Migration Migration Migration Entwickler 1 t1 t2 t3 Migration Migration Migration Entwickler 2 t1 t2 t3 Migration Migration Migration Produktivsystem t1 t2 t3
    52. 52. Konventionen in Rails Name der Tabelle ist die Pluralform des Namens des zugehörigen Modells Beispiel: • Name des Modells: project • Name der Tabelle in der DB: projects
    53. 53. convention over con guration
    54. 54. wichtige Datentypen Rails MySQL :boolean tinyint(1) :integer int(11) :float float :string varchar(255) :date date :datetime datetime Quelle: http://www.orthogonalthought.com/blog/index.php/2007/06/mysql-and-ruby-on-rails-datatypes/
    55. 55. # db/migrate/20090426223046_create_tasks.rb class CreateTasks < ActiveRecord::Migration # ausgeführt, sobald zu dieser Version migriert wird def self.up # Erstellen einer Tabelle tasks mit bestimmten Spalten create_table :tasks do |t| t.string :title, :null => false t.boolean :done, :null => false, :default => false t.timestamps end end # ausgeführt, sobald diese Version zurückgenommen werden soll def self.down drop_table :tasks end end
    56. 56. wichtige Funktionen in Migrations create_table Tabellenname &Block Block beinhaltet die De nition der Tabellenspalten in der Form: • Blockvariable. Datentyp Spaltenname, Optionen
    57. 57. wichtige Funktionen in Migrations Optionen können sein: • :null => false (Nullwert nicht erlaubt) • :default => Wert (Defaultwert festlegen) drop_table Tabellenname mehr in der API (ActiveRecord::Migration)
    58. 58. Rake Scriptinterpreter für automatisierbare Aufgaben (häu g während der Entwicklung verwendet) Aufruf: rake Scriptname (weitere Parameter...) Beispiel (Migration der Datenbank): • rake db:migrate (VERSION=timestamp) • keine Angabe einer Version migriert zur aktuellen Version
    59. 59. Rails-Konsole ruby script/console lieferte eine irb-Konsole, die alle Railsmodule und Einstellungen der Anwendung bereits geladen hat
    60. 60. DEMO • Herokugarden • Nutzung der Rails API • einfache ActiveRecord Methoden (mehr hierzu in einer der kommenden Sitzungen)
    61. 61. ?
    62. 62. code english
    63. 63. Aufgabe • Eine neue Anwendung anlegen • Kein Scaffolding! • Ein Datenmodell Project erstellen mit: • Tabellenname: projects • Einem Titel (title) - Datentyp: String • Einer Beschreibung (description) - Datentyp: Text • Einige Projekte mittels Rails-Konsole erstellen • Eine Au istung der Projekte ausgeben, nachdem ein entsprechender Controller (ProjectsController) mit dazugehörigem View (index) erstellt wurde

    ×