SlideShare uma empresa Scribd logo
1 de 63
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
5
Ruby on Rails
Eine erste Anwendung (2)
Komponenten
•   ActionController
•   ActionView
•   ActiveRecord
•   ActionMailer
•   ActiveResource
•   ActiveSupport
•   Railties
Komponenten
•   ActionController
•   ActionView
•   ActiveRecord
•   ActionMailer
•   ActiveResource
•   ActiveSupport
•   Railties
Komponenten
•   ActionController
                       ActionPack
•   ActionView
•   ActiveRecord
•   ActionMailer
•   ActiveResource
•   ActiveSupport
•   Railties
MVC Rails
MVC Rails




            ActionPack
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
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
Einen Controller löschen

script/destroy controller ControllerName


Anmerkungen zu script/destroy:
 • führt das Löschen ohne weitere Rüchfragen
    durch!
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
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
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;)
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
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
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
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
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
convention
    over
con guration
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)
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
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>
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>
Komponenten
•   ActionController
•   ActionView
•   ActiveRecord
•   ActionMailer
•   ActiveResource
•   ActiveSupport
•   Railties
Komponenten
•   ActionController
•   ActionView
•   ActiveRecord
•   ActionMailer
•   ActiveResource
•   ActiveSupport
•   Railties
MVC Rails
MVC Rails
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
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
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
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
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;
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;
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)
Ein Model erstellen

script/generate model ModelName attributes




Löschen erfolgt analog zum Controller mit script/
destroy model
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
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 Datenbankstruktur,
       die von ActiveRecord genutzt wird
Migration (up)


 Migration
    t1
 Projekt-
  Modell
 erstellen
Migration (up)


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


 Migration   Migration    Migration
    t1          t2           t3
 Projekt-    Aufgaben-     Projekt-
  Modell       Modell      Modell
 erstellen    erstellen    ändern
Migration (down)


 Migration   Migration    Migration
    t1          t2           t3
 Projekt-    Aufgaben-     Projekt-
  Modell       Modell      Modell
 erstellen    erstellen    ändern
Migration (down)


 Migration   Migration    Migration
    t1          t2           t3
 Projekt-    Aufgaben-     Projekt-
  Modell       Modell      Modell
 erstellen    erstellen    ändern
Migration (down)


 Migration   Migration
    t1          t2
 Projekt-    Aufgaben-
  Modell       Modell
 erstellen    erstellen
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
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
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
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
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
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
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
convention
    over
con guration
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/
# 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
wichtige Funktionen in Migrations



create_table Tabellenname &Block
Block beinhaltet die De nition der Tabellenspalten
in der Form:
 •   Blockvariable. Datentyp Spaltenname, Optionen
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)
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
Rails-Konsole


ruby script/console


lieferte eine irb-Konsole, die alle Railsmodule und
Einstellungen der Anwendung bereits geladen hat
DEMO



•   Herokugarden

•   Nutzung der Rails API

•   einfache ActiveRecord Methoden
    (mehr hierzu in einer der kommenden Sitzungen)
?
code
english
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

Mais conteúdo relacionado

Mais procurados

Lehmanns Rails Erweitern
Lehmanns Rails ErweiternLehmanns Rails Erweitern
Lehmanns Rails Erweiternjan_mindmatters
 
Mehr Dynamik Durch Skriptsprachen
Mehr Dynamik Durch SkriptsprachenMehr Dynamik Durch Skriptsprachen
Mehr Dynamik Durch Skriptsprachenjlink
 
Android Development ...and the daily challenges
Android Development ...and the daily challengesAndroid Development ...and the daily challenges
Android Development ...and the daily challengesDominik Helleberg
 
2009 03 17 Spring101
2009 03 17 Spring1012009 03 17 Spring101
2009 03 17 Spring101gueste4be40
 
Einführung Mercurial
Einführung MercurialEinführung Mercurial
Einführung Mercurialwielandp
 
Python builds mit ant
Python builds mit antPython builds mit ant
Python builds mit antroskakori
 

Mais procurados (9)

Lehmanns Rails Erweitern
Lehmanns Rails ErweiternLehmanns Rails Erweitern
Lehmanns Rails Erweitern
 
Testing tools
Testing toolsTesting tools
Testing tools
 
Mehr Dynamik Durch Skriptsprachen
Mehr Dynamik Durch SkriptsprachenMehr Dynamik Durch Skriptsprachen
Mehr Dynamik Durch Skriptsprachen
 
Android Development ...and the daily challenges
Android Development ...and the daily challengesAndroid Development ...and the daily challenges
Android Development ...and the daily challenges
 
Ruby on Rails SS09 04
Ruby on Rails SS09 04Ruby on Rails SS09 04
Ruby on Rails SS09 04
 
TypeScript
TypeScriptTypeScript
TypeScript
 
2009 03 17 Spring101
2009 03 17 Spring1012009 03 17 Spring101
2009 03 17 Spring101
 
Einführung Mercurial
Einführung MercurialEinführung Mercurial
Einführung Mercurial
 
Python builds mit ant
Python builds mit antPython builds mit ant
Python builds mit ant
 

Destaque

The Hero's Journey in Amsterdam Demo Guide 21 october 2013
The Hero's Journey in Amsterdam Demo Guide 21 october 2013The Hero's Journey in Amsterdam Demo Guide 21 october 2013
The Hero's Journey in Amsterdam Demo Guide 21 october 2013Peter de Kuster
 
The Hero's Journey in Paris Demo Guide november 2013
The Hero's Journey in Paris Demo Guide november 2013The Hero's Journey in Paris Demo Guide november 2013
The Hero's Journey in Paris Demo Guide november 2013Peter de Kuster
 
The Hero's Journey in London Demo Guide november 2013
The Hero's Journey in London Demo Guide november 2013 The Hero's Journey in London Demo Guide november 2013
The Hero's Journey in London Demo Guide november 2013 Peter de Kuster
 
The Hero's Journey in London Demo Guide november 2013
The Hero's Journey in London Demo Guide november 2013The Hero's Journey in London Demo Guide november 2013
The Hero's Journey in London Demo Guide november 2013Peter de Kuster
 
The Hero's Journey in London Demo Guide November 2013
The Hero's Journey in London Demo Guide November 2013The Hero's Journey in London Demo Guide November 2013
The Hero's Journey in London Demo Guide November 2013Peter de Kuster
 
De Reis van de Heldin. Creatief van een andere Orde 17 october 2013
De Reis van de Heldin. Creatief van een andere Orde 17 october 2013De Reis van de Heldin. Creatief van een andere Orde 17 october 2013
De Reis van de Heldin. Creatief van een andere Orde 17 october 2013Peter de Kuster
 

Destaque (7)

The Hero's Journey in Amsterdam Demo Guide 21 october 2013
The Hero's Journey in Amsterdam Demo Guide 21 october 2013The Hero's Journey in Amsterdam Demo Guide 21 october 2013
The Hero's Journey in Amsterdam Demo Guide 21 october 2013
 
The Hero's Journey in Paris Demo Guide november 2013
The Hero's Journey in Paris Demo Guide november 2013The Hero's Journey in Paris Demo Guide november 2013
The Hero's Journey in Paris Demo Guide november 2013
 
Ruby on Rails SS09 10
Ruby on Rails SS09 10Ruby on Rails SS09 10
Ruby on Rails SS09 10
 
The Hero's Journey in London Demo Guide november 2013
The Hero's Journey in London Demo Guide november 2013 The Hero's Journey in London Demo Guide november 2013
The Hero's Journey in London Demo Guide november 2013
 
The Hero's Journey in London Demo Guide november 2013
The Hero's Journey in London Demo Guide november 2013The Hero's Journey in London Demo Guide november 2013
The Hero's Journey in London Demo Guide november 2013
 
The Hero's Journey in London Demo Guide November 2013
The Hero's Journey in London Demo Guide November 2013The Hero's Journey in London Demo Guide November 2013
The Hero's Journey in London Demo Guide November 2013
 
De Reis van de Heldin. Creatief van een andere Orde 17 october 2013
De Reis van de Heldin. Creatief van een andere Orde 17 october 2013De Reis van de Heldin. Creatief van een andere Orde 17 october 2013
De Reis van de Heldin. Creatief van een andere Orde 17 october 2013
 

Semelhante a Ruby on Rails SS09 05

An Introduction to Ruby On Rails
An Introduction to Ruby On RailsAn Introduction to Ruby On Rails
An Introduction to Ruby On RailsJonathan Weiss
 
Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud
Wie skaliert man Software as a Service Applikationen in der Windows Azure CloudWie skaliert man Software as a Service Applikationen in der Windows Azure Cloud
Wie skaliert man Software as a Service Applikationen in der Windows Azure CloudPatric Boscolo
 
Lightweight AOP with CDI and JPA
Lightweight AOP with CDI and JPALightweight AOP with CDI and JPA
Lightweight AOP with CDI and JPAmh0708
 
Domain Driven Design in Rails
Domain Driven Design in RailsDomain Driven Design in Rails
Domain Driven Design in RailsAngelo Maron
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...GFU Cyrus AG
 
Streaming Plattformen und die Qual der Wahl
Streaming Plattformen und die Qual der WahlStreaming Plattformen und die Qual der Wahl
Streaming Plattformen und die Qual der WahlMatthias Niehoff
 
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET CoreElectron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET CoreGregor Biswanger
 
Forms and Reports 12c - Processes and Automation in Development and Operations
Forms and Reports 12c - Processes and Automation in Development and OperationsForms and Reports 12c - Processes and Automation in Development and Operations
Forms and Reports 12c - Processes and Automation in Development and OperationsTorsten Kleiber
 
Reaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen WortenReaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen WortenQAware GmbH
 
Reaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen WortenReaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen WortenQAware GmbH
 
Reaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen WortenReaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen WortenQAware GmbH
 
The pain of choice - Important libs for C# developers
The pain of choice - Important libs for C# developersThe pain of choice - Important libs for C# developers
The pain of choice - Important libs for C# developersFDeitelhoff
 
Javascript auf Client und Server mit node.js - webtech 2010
Javascript auf Client und Server mit node.js - webtech 2010Javascript auf Client und Server mit node.js - webtech 2010
Javascript auf Client und Server mit node.js - webtech 2010Dirk Ginader
 
Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit RustJens Siebert
 
Reaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen WortenReaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen WortenQAware GmbH
 
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...André Krämer
 
.NET Summit 2016 in München: ASP.NET Core 1
.NET Summit 2016 in München: ASP.NET Core 1.NET Summit 2016 in München: ASP.NET Core 1
.NET Summit 2016 in München: ASP.NET Core 1Manfred Steyer
 

Semelhante a Ruby on Rails SS09 05 (20)

An Introduction to Ruby On Rails
An Introduction to Ruby On RailsAn Introduction to Ruby On Rails
An Introduction to Ruby On Rails
 
Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud
Wie skaliert man Software as a Service Applikationen in der Windows Azure CloudWie skaliert man Software as a Service Applikationen in der Windows Azure Cloud
Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud
 
Lightweight AOP with CDI and JPA
Lightweight AOP with CDI and JPALightweight AOP with CDI and JPA
Lightweight AOP with CDI and JPA
 
Domain Driven Design in Rails
Domain Driven Design in RailsDomain Driven Design in Rails
Domain Driven Design in Rails
 
react-de.pdf
react-de.pdfreact-de.pdf
react-de.pdf
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
 
Ruby on Rails SS09 06
Ruby on Rails SS09 06Ruby on Rails SS09 06
Ruby on Rails SS09 06
 
Streaming Plattformen und die Qual der Wahl
Streaming Plattformen und die Qual der WahlStreaming Plattformen und die Qual der Wahl
Streaming Plattformen und die Qual der Wahl
 
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET CoreElectron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
 
Forms and Reports 12c - Processes and Automation in Development and Operations
Forms and Reports 12c - Processes and Automation in Development and OperationsForms and Reports 12c - Processes and Automation in Development and Operations
Forms and Reports 12c - Processes and Automation in Development and Operations
 
Reaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen WortenReaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen Worten
 
Reaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen WortenReaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen Worten
 
TypeScript
TypeScriptTypeScript
TypeScript
 
Reaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen WortenReaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen Worten
 
The pain of choice - Important libs for C# developers
The pain of choice - Important libs for C# developersThe pain of choice - Important libs for C# developers
The pain of choice - Important libs for C# developers
 
Javascript auf Client und Server mit node.js - webtech 2010
Javascript auf Client und Server mit node.js - webtech 2010Javascript auf Client und Server mit node.js - webtech 2010
Javascript auf Client und Server mit node.js - webtech 2010
 
Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit Rust
 
Reaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen WortenReaktive Programmierung in verständlichen Worten
Reaktive Programmierung in verständlichen Worten
 
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...
 
.NET Summit 2016 in München: ASP.NET Core 1
.NET Summit 2016 in München: ASP.NET Core 1.NET Summit 2016 in München: ASP.NET Core 1
.NET Summit 2016 in München: ASP.NET Core 1
 

Mais de Daniel Dengler

Mais de Daniel Dengler (6)

Ruby on Rails SS09 12
Ruby on Rails SS09 12Ruby on Rails SS09 12
Ruby on Rails SS09 12
 
Ruby on Rails SS09 11
Ruby on Rails SS09 11Ruby on Rails SS09 11
Ruby on Rails SS09 11
 
Ruby on Rails SS09 07
Ruby on Rails SS09 07Ruby on Rails SS09 07
Ruby on Rails SS09 07
 
Ruby on Rails SS09 03
Ruby on Rails SS09 03Ruby on Rails SS09 03
Ruby on Rails SS09 03
 
Ruby on Rails SS09 02
Ruby on Rails SS09 02Ruby on Rails SS09 02
Ruby on Rails SS09 02
 
Ruby on Rails SS09 01
Ruby on Rails SS09 01Ruby on Rails SS09 01
Ruby on Rails SS09 01
 

Ruby on Rails SS09 05

  • 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. 5 Ruby on Rails Eine erste Anwendung (2)
  • 3. Komponenten • ActionController • ActionView • ActiveRecord • ActionMailer • ActiveResource • ActiveSupport • Railties
  • 4. Komponenten • ActionController • ActionView • ActiveRecord • ActionMailer • ActiveResource • ActiveSupport • Railties
  • 5. Komponenten • ActionController ActionPack • ActionView • ActiveRecord • ActionMailer • ActiveResource • ActiveSupport • Railties
  • 7. MVC Rails ActionPack
  • 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. 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. Einen Controller löschen script/destroy controller ControllerName Anmerkungen zu script/destroy: • führt das Löschen ohne weitere Rüchfragen durch!
  • 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. 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. 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. 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. 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. 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. 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. 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. convention over con guration
  • 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. 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. 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. 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. Komponenten • ActionController • ActionView • ActiveRecord • ActionMailer • ActiveResource • ActiveSupport • Railties
  • 25. Komponenten • ActionController • ActionView • ActiveRecord • ActionMailer • ActiveResource • ActiveSupport • Railties
  • 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. 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. 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. 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. 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. 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. 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. Ein Model erstellen script/generate model ModelName attributes Löschen erfolgt analog zum Controller mit script/ destroy model
  • 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. Migrations ActiveRecord Migration ActiveRecord ist unabhängig von den Migrations
  • 38. Migrations ActiveRecord Migration ActiveRecord ist unabhängig von den Migrations
  • 39. Migrations ActiveRecord Migration DB Die Migrations de nieren die Datenbankstruktur, die von ActiveRecord genutzt wird
  • 40. Migration (up) Migration t1 Projekt- Modell erstellen
  • 41. Migration (up) Migration Migration t1 t2 Projekt- Aufgaben- Modell Modell erstellen erstellen
  • 42. Migration (up) Migration Migration Migration t1 t2 t3 Projekt- Aufgaben- Projekt- Modell Modell Modell erstellen erstellen ändern
  • 43. Migration (down) Migration Migration Migration t1 t2 t3 Projekt- Aufgaben- Projekt- Modell Modell Modell erstellen erstellen ändern
  • 44. Migration (down) Migration Migration Migration t1 t2 t3 Projekt- Aufgaben- Projekt- Modell Modell Modell erstellen erstellen ändern
  • 45. Migration (down) Migration Migration t1 t2 Projekt- Aufgaben- Modell Modell erstellen erstellen
  • 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. 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. 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. 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. 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. 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. 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. convention over con guration
  • 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. # 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. wichtige Funktionen in Migrations create_table Tabellenname &Block Block beinhaltet die De nition der Tabellenspalten in der Form: • Blockvariable. Datentyp Spaltenname, Optionen
  • 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. 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. Rails-Konsole ruby script/console lieferte eine irb-Konsole, die alle Railsmodule und Einstellungen der Anwendung bereits geladen hat
  • 60. DEMO • Herokugarden • Nutzung der Rails API • einfache ActiveRecord Methoden (mehr hierzu in einer der kommenden Sitzungen)
  • 61. ?
  • 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

Notas do Editor