Daniel Dengler
                                                                                               web develope...
5
Ruby on Rails
Eine erste Anwendung (2)
Komponenten
•   ActionController
•   ActionView
•   ActiveRecord
•   ActionMailer
•   ActiveResource
•   ActiveSupport
•  ...
Komponenten
•   ActionController
•   ActionView
•   ActiveRecord
•   ActionMailer
•   ActiveResource
•   ActiveSupport
•  ...
Komponenten
•   ActionController
                       ActionPack
•   ActionView
•   ActiveRecord
•   ActionMailer
•   Ac...
MVC Rails
MVC Rails




            ActionPack
Einen Controller erstellen
script/generate controller ControllerName actions


Anmerkungen zu script/generate:
 •   script...
Einen Controller erstellen
script/generate controller Home index imprint


Datei: app/controllers/home_controller.rb
class...
Einen Controller löschen

script/destroy controller ControllerName


Anmerkungen zu script/destroy:
 • führt das Löschen o...
Aufgaben von Controllern

•   steuern die Anwendung
•   können Daten unter Verwendung von
    ActiveRecord verändern
•   b...
Aufgaben von Views


•   zeigen die vom Controller erhaltenen Daten im
    gewünschten Format an
•   enthalten Verweise zu...
Aufgaben von Helpern

können häu ger verwendete Funktionalität für
Views bereitstellen
Beispiele:
 •   kleines Benutzerpro...
Actions in Controllern


Jede öffentliche (public) Methode eines Controllers
ist von außen über den Browser erreichbar und
...
Grundlegende Funktionen von
Controllern
redirect_to leitet die aktuelle Anfrage an eine andere URL
weiter
render gibt etwa...
Etwas zurückgeben
class HomeController < ApplicationController
  # URLs:
  # /home
  # /home/index
  def index
    render ...
Etwas zurückgeben

class HomeController < ApplicationController
  # Gibt das Template der Methode imprint zurück
  # Achtu...
Den Besucher weiterleiten

class HomeController < ApplicationController
  # Leitet den Beutzer an die Action imprint weite...
convention
    over
con guration
RHTML Templates

<% %> wird verwendet um Ruby Code in RHTML Templates
einzubetten
<%= %> wird verwendet um Ruby Code in RH...
Grundlegende Funktionen von RHTML Views




 •   link_to stellt Verknüpfungen her

 •   h codiert HTML Zeichen um das eins...
Grundlegende Funktionen von RHTML Views

# controllers/home_controller.rb
class HomeController < ApplicationController
  d...
Grundlegende Funktionen von RHTML Views
# controllers/home_controller.rb
class HomeController < ApplicationController
  de...
Komponenten
•   ActionController
•   ActionView
•   ActiveRecord
•   ActionMailer
•   ActiveResource
•   ActiveSupport
•  ...
Komponenten
•   ActionController
•   ActionView
•   ActiveRecord
•   ActionMailer
•   ActiveResource
•   ActiveSupport
•  ...
MVC Rails
MVC Rails
Aufgaben von Modellen

•   kümmern sich um die Datenhaltung
•   enthalten die Datenlogik der Anwendung
•   sorgen für eine...
Crash-Kurs Datenbanken (1)
                Tabelle: projects

                               created_at   updated_at
  id ...
Crash-Kurs Datenbanken (1)
                Tabelle: projects

                               created_at   updated_at
  id ...
Crash-Kurs Datenbanken (1)
                Tabelle: projects

                               created_at   updated_at
  id ...
Crash-Kurs Datenbanken (1)
                Tabelle: projects
                               created_at   updated_at
  id (...
Crash-Kurs Datenbanken (1)
                Tabelle: projects
                               created_at   updated_at
  id (...
Crash-Kurs Datenbanken (1)
                Tabelle: projects
                               created_at   updated_at
  id (...
Ein Model erstellen

script/generate model ModelName attributes




Löschen erfolgt analog zum Controller mit script/
dest...
Migrations
•   In Migrations werden Änderungen an der
    Datenbankstruktur im zeitlichen Verlauf
    festgehalten
•   Mig...
Migrations


   ActiveRecord                Migration




ActiveRecord ist unabhängig von den Migrations
Migrations


   ActiveRecord                Migration




ActiveRecord ist unabhängig von den Migrations
Migrations


ActiveRecord                         Migration
                      DB




Die Migrations de nieren die Date...
Migration (up)


 Migration
    t1
 Projekt-
  Modell
 erstellen
Migration (up)


 Migration   Migration
    t1          t2
 Projekt-    Aufgaben-
  Modell       Modell
 erstellen    erst...
Migration (up)


 Migration   Migration    Migration
    t1          t2           t3
 Projekt-    Aufgaben-     Projekt-
 ...
Migration (down)


 Migration   Migration    Migration
    t1          t2           t3
 Projekt-    Aufgaben-     Projekt-...
Migration (down)


 Migration   Migration    Migration
    t1          t2           t3
 Projekt-    Aufgaben-     Projekt-...
Migration (down)


 Migration   Migration
    t1          t2
 Projekt-    Aufgaben-
  Modell       Modell
 erstellen    er...
Einsatz von Migrations
                   Migration   Migration   Migration
 Entwickler 1         t1          t2          ...
Einsatz von Migrations
                   Migration   Migration   Migration
 Entwickler 1         t1          t2          ...
Einsatz von Migrations
                   Migration   Migration   Migration
 Entwickler 1         t1          t2          ...
Einsatz von Migrations
                   Migration   Migration   Migration
 Entwickler 1         t1          t2          ...
Einsatz von Migrations
                   Migration   Migration   Migration
 Entwickler 1         t1          t2          ...
Einsatz von Migrations
                   Migration   Migration   Migration
 Entwickler 1         t1          t2          ...
Konventionen in Rails

Name der Tabelle ist die Pluralform des Namens
des zugehörigen Modells
Beispiel:
 •   Name des Mode...
convention
    over
con guration
wichtige Datentypen

                  Rails                                              MySQL
               :boolean   ...
# db/migrate/20090426223046_create_tasks.rb
class CreateTasks < ActiveRecord::Migration
  # ausgeführt, sobald zu dieser V...
wichtige Funktionen in Migrations



create_table Tabellenname &Block
Block beinhaltet die De nition der Tabellenspalten
i...
wichtige Funktionen in Migrations

Optionen können sein:
 •   :null => false (Nullwert nicht erlaubt)
 •   :default => Wer...
Rake

Scriptinterpreter für automatisierbare Aufgaben (häu g
während der Entwicklung verwendet)
Aufruf: rake Scriptname (w...
Rails-Konsole


ruby script/console


lieferte eine irb-Konsole, die alle Railsmodule und
Einstellungen der Anwendung bere...
DEMO



•   Herokugarden

•   Nutzung der Rails API

•   einfache ActiveRecord Methoden
    (mehr hierzu in einer der komm...
?
code
english
Aufgabe
•   Eine neue Anwendung anlegen
•   Kein Scaffolding!
•   Ein Datenmodell Project erstellen mit:
    •   Tabellenna...
Upcoming SlideShare
Loading in...5
×

Ruby on Rails SS09 05

753

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
753
On Slideshare
0
From Embeds
0
Number of Embeds
0
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

    ×