Ruby on Rails Ruby on Rails http://reinholdweber.com   – reinhold.weber@gmx.net
Ruby on Rails Inhalt Einführende Beispiele Ruby Rails Live Beispiel
Ruby on Rails Ruby Interpretierte, objektorientierte & dynamisch typisierte Skriptsprache Rails Fullstack MVC WebApplication Framework
Ruby on Rails „  Makes Php look like Assembler “ Ruby IRC Channel
Ruby on Rails „  Nachahmung  ist die höchste  Form der   Anerkennung “
Ruby on Rails Rails Nachbildungen in PHP solar Seagull Zend Framework symfony CakePHP Prado ZooP WACT CodeIgniter
Ruby on Rails Library Modul, das eine bestimmte Funktionalität anbietet eZComponents / PEAR Plattform, auf der man seine Anwendung aufbauen kann Ruby on Rails / CakePHP / .NET / Django Framework
Ruby on Rails Basecamp Twitter Mephisto Measuremap Odeo Highrise 43 Places Backpack shopify Rails Anwendungen
Ruby on Rails Ruby eine dynamische, freie Programmiersprache,  die sich  einfach anwenden  und  produktiv einsetzen lässt.  Sie hat eine  elegante Syntax , die man leicht  lesen und schreiben kann.
Ruby on Rails Ruby - Japan 1995, Yukihiro Matsumoto - Open Source - Mischung aus Perl, Smalltalk, Eiffel, Ada und Lisp - Hohe Qualität der Bibliotheken - Wenige aber hochwertige Literatur
Ruby on Rails Ruby charakteristika
Ruby on Rails Ruby - Generisch, interpretiert, reflektiert, mit Garbage Collector - Eher auf Menschen als auf Computer optimiert - Mächtiger als Perl, objektorientierter als Python - Alles ist ein Objekt, keine primitiven Datentypen - Starke dynamische Typisierung
Ruby on Rails Alles ist ein Objekt String = String.new 5.times do  puts „Hello World“ end Hello World Hello World Hello World Hello World Hello World => 5
Ruby on Rails Alles ist ein Objekt 1.upto(100) { |i| puts i } 3.141.ceil 2.718.floor 1 2 3 … 100 => 1 => 4 =>  2
Ruby on Rails Alles ist ein Objekt rand.to_s [2..10] validates_each :href, :on => :create do |record, attr, value| begin uri = URI.parse(value) if uri.class != URI::HTTP record.errors.add(attr, 'Only HTTP protocol addresses can be used') end rescue URI::InvalidURIError record.errors.add(attr, 'The format of the url is not valid.') end end 8digit long random number
Ruby on Rails Alles ist ein Objekt class Auto def beschleunigen puts 'Brumm' end end auto1 = Auto.new auto1.beschleunigen Brumm => nil
Ruby on Rails Alles ist ein Objekt class GutesAuto < Auto def bremsen puts 'Quietsch' end end auto2 = GutesAuto.new auto2.beschleunigen auto2.bremsen Brumm Quietsch => nil
Ruby on Rails Ruby Syntax a = [1, 'hi', 3.14, 1, 2, [4, 5]] a[2]  # 3.14 a.reverse  # [[4, 5], 2, 1, 3.14, 'hi', 1] a.flatten.uniq # [1, 'hi', 3.14, 2, 4, 5]
Ruby on Rails PHP   Ruby  Gemeinsamkeiten + auch dynamisch typisiert + es gibt Klassen und Zugriffsmodifizierer (public, protected, private) + heredoc Syntax - Exceptions wie in PHP 5
Ruby on Rails PHP   Ruby  Gemeinsamkeiten + große Standardbibliothek + true und false wie in PHP,  null = nil + einige Variablen beginnen mit $ + String Interpolation  „ $foo is a $bar” --- ”#{foo} is a #{bar}”
Ruby on Rails PHP   Ruby  Unterschiede - hat strenge Typisierung to_s, to_i - Strings, Zahlen, Arrays und Hashes sind Objekte Statt abs(-1)  hier -1.abs - Klammern in Methodenaufrufen sind optional - keine abstract oder interface Klassen
Ruby on Rails Java   Ruby  Gemeinsamkeiten + Speicher wird von einem Garbage-Collector verwaltet + Werkzeuge zur Dokumentation: RDoc + Objekte sind stark getypt + es gibt Klassen und Zugriffsmodifizierer (public, protected, private)
Ruby on Rails Java   Ruby  Unterschiede - muss nicht kompiliert werden - verschiedene GUI Toolkits z.B. WxRuby - require statt import - Klammern in Methodenaufrufen optional get_books
Ruby on Rails Java   Ruby  Unterschiede - Alle Instanzvariablen sind privat, Zugriff nur über Methoden - Keine statische Typprüfung - keine Typdeklarationen notwendig a = [1,2,3]  statt  int[] a = [1,2,3]; - keine Typumwandlung (Typecasting)
Ruby on Rails Java   Ruby  Unterschiede - Konstruktor heißt immer initialize anstatt Klassenname - Mixins anstelle von Interfaces - self anstatt this - Unit-Testing noch einfacher
Ruby on Rails Rails - Dänemark 2004, David Heinemeier Hansson - Open Source MIT Lizenz - 15 Core Entwickler - Fullstack MVC WebFramework - Wurde aus bestehender Anwendung extrahiert
Ruby on Rails Ruby on Rails philosophie
Ruby on Rails Ruby on Rails Die  1. Regel  im Rails Club lautet: Don‘t repeat yourself
Ruby on Rails Ruby on Rails Die  2. Regel  im Rails Club lautet: Don‘t repeat yourself
Ruby on Rails DRY &quot;Don't repeat yourself&quot;- Prinzip (DRY):  Bsp: In Rails ist kein explizites  Datenbankschema nötig, um mit der Datenbank  zu kommunizieren, da die Datenbank direkt ausgewertet wird.
Ruby on Rails MVC Best practices REST Convention over configuration DRY OOP Active Record CRUD
Ruby on Rails MVC Rails verwendet das Modell-View-Controller-Muster (MVC),  welches die Schichten der Anwendung  sauber in Verantwortungsbereiche aufteilt
Ruby on Rails MVC Das  Model  bildet die zugrundeliegende Datenstruktur Die  View  ist die Darstellung der Datenstruktur Der  Controller  enthält die eigentliche Programmlogik
Ruby on Rails MVC Model Controller Browser View Database
Ruby on Rails M VC -  Model Das  Model  bildet die zugrundeliegende Datenstruktur Die  View  ist die Darstellung der Datenstruktur Der  Controller  enthält die eigentliche Programmlogik
Ruby on Rails Active Record ein Object-Relational Mapper (ORM)  Klasse      Datenbanktabelle Methoden      Datenbankfelder Objekt      Datensatz
Ruby on Rails Active Record Patient +name +email +date_of_birth +age +gender  Datenbank
Ruby on Rails Active Record::Base#Find class Patient< ActiveRecord::Base end Patient.find(1) SELECT * FROM patients WHERE id = 1 Patient.count SELECT COUNT(*) AS count Patient.find_by_name ‘Reinhold Weber‘ SELECT * FROM patients WHERE name = ‚Reinhold Weber‘ Patient.find_by_date_of_birth ‘1985-07-08‘ SELECT * FROM patients WHERE date_of_birth = ‚1985-07-08‘
Ruby on Rails Models class Patient< ActiveRecord::Base end class Encounter< ActiveRecord::Base end class Physician< ActiveRecord::Base end
Ruby on Rails Associations class Patient< ActiveRecord::Base has_many :encounters has_many :physicians, :through => :encounters  end class Encounter< ActiveRecord::Base belongs_to :patient belongs_to :physician end class Physician< ActiveRecord::Base has_many :encounters has_many :patients, :through => :encounters  end
Ruby on Rails Sensible Defaults class Patient < ActiveRecord::Base has_many :encounters,  :class_name => 'Encounter',  :foreign_key => 'patient_id' has_many :physicians, :through => encounters,  :class_name => 'Physician',  :foreign_key => 'physician_id' end
Ruby on Rails Sensible Defaults class Encounter < ActiveRecord::Base belongs_to :patient,  :class_name => 'Patient',  :foreign_key => 'patient_id' belongs_to :physician,  :class_name => 'Physician',  :foreign_key => 'physician_id' end
Ruby on Rails Sensible Defaults class Physician < ActiveRecord::Base has_many :encounters,  :class_name => 'Encounter',  :foreign_key => 'patient_id' has_many :patients, :through :encounters  :class_name => 'Patient',  :foreign_key => 'patient_id' end
Ruby on Rails M V C -  View Das  Model  bildet die zugrundeliegende Datenstruktur Die  View  ist die Darstellung der Datenstruktur Der  Controller  enthält die eigentliche Programmlogik
Ruby on Rails View Modul aus der ActionPack Bibliothek  welches eine Antwort für den Client rendert entscheidet, welches Template und/oder Partial  und Layout benutzt wird Templates benutzen helper Methoden um Links,  Formulare und JavaScript zu generieren und Text  zu formatiieren
Ruby on Rails Templates Vorlagen befinden sich in app/view/controller_name, . Z.B. die Vorlagen für start::PatientController  befinden sich unter app/views/start/patient Vorlagen, die von mehreren Controllern benutzt werden  befinden sich in app/views/shared
Ruby on Rails Templates rhtml  -  die am häufigsten vorkommende Variante  für HTML. HTML Dateien mit eingebettetem Ruby,  die die ERb Bibliothek benutzen rxml  -  Dateien mit Ruby code, die die Builder Bibliothek  benutzen um XML zu generieren, wird normalerweise für  RSS/Atom benutzt rjs  -  Ruby Code mit einer Rails spezifischen API, die JavaScript  generiert. Wird benutzt für AJAX
Ruby on Rails Partials Partials sind Templates, die nur einen Teil einer Seite  generieren wie z.B. einen Header oder Footer Partials helfen dabei Seitenelemente wiederzuverwenden funktionieren genauso wie Page Templates (views),  laufen in derselben Umgebung und sind  im selben Verzeichnis Dateinamen beginnen mit einem underscore  _header
Ruby on Rails Helpers Helpers sind Ruby Module mit Methoden,  die in den Templates verfügbar sind Helpers können Duplikate verhindern und minimieren  den Code in den Templates Jeder Controller hat per default einen  korrespondierenden helper unter  app/helpers/controller_name_helper.rb
Ruby on Rails View <html> <head> <title><%= @title %></title> </head> <body> <h1><%= @homepage_title %></h1>   <strong>Patient:</strong>   <li>Name: <%= @patient.name %></li> <%= render :partial => 'patient_details' %> </body> </html>
Ruby on Rails MV C  -  Controller Das  Model  bildet die zugrundeliegende Datenstruktur Die  View  ist die Darstellung der Datenstruktur Der  Controller  enthält die eigentliche Programmlogik
Ruby on Rails Action Controller Trennung von Business Logik  & Präsentation Idealerweise sollte keinerlei Logik  in der Präsentationsschicht  sein Controller sind Ruby Klassen und befinden sich in app/controllers
Ruby on Rails Action Controller class PatientController < ApplicationController def index @patient = Patient.find :first @title = 'Patient Detail' @homepage_title = &quot;Patient: #{@patient.name}&quot; end end
Ruby on Rails Intelligente  Architektur Jede Rails-Anwendung hat eine identische Dateistruktur,  es sind kaum Konfigurationsanpassungen nötig.
Ruby on Rails Struktur app/ components/ config/ db/ doc/ lib/ log/ public/ script/ test/ tmp/ vendor/ ruby projekt1
Ruby on Rails Scaffolding Mit wenigen Befehlen kann eine komplette  Administrationsoberfläche zum Erstellen, Bearbeiten  und Löschen von Datenbankeinträgen erstellt werden.  Rails erzeugt automatisch den Programm- und HTML-Code,  der sukzessive um individuelle Funktionalität erweitert werden kann.
Ruby on Rails Scaffolding Klasse      Datenbanktabelle Methoden      Datenbankfelder Objekt      Datensatz
Ruby on Rails Konvention über Konfiguration DB Tabelle ‚entries‘      Klasse ‚Entry‘
Ruby on Rails Migrations Ein Weg das Datenbankschema zu entwickeln Migrations benutzen eine datenbankunabhängige Ruby API Migration Klassen erben von ActiveRecord::Migration script/generate migration
Ruby on Rails CRUD Create: create, new Read:  find, find_by_<attr> Update: save, update_attributes Delete: destroy
Ruby on Rails Schnelles  Feedback Ruby-Code wird zur Laufzeit interpretiert,  Live-Änderungen an der Datenbankstruktur  sind während der Entwicklung ohne Server-Neustart möglich.
Ruby on Rails Web 2.0 inklusive Techniken wie AJAX und visuelle Effekte  sind von Haus aus mit wenigen Zeilen nutzbar.. Ajax Eye Candy
Ruby on Rails Ruby on Rails installation
Ruby on Rails Installation Instant Rails/ Locomotive      Windows MacPorts/ Quellen      Mac Quellen      Linux
Ruby on Rails Installation Ruby rubyonrails.org/down Windows Installer runterladen, welcher  Ruby und einige Extensions enthält - Alle Komponenten installieren
Ruby on Rails Installation Rails Installierte Ruby Version ausgeben ruby -v Über RubyGem, das Paketverwaltungssystem von Ruby, Rails installieren  gem install rails --include-dependencies
Ruby on Rails Projekt anlegen Neues Projekt erzeugen ruby> rails cookbook Server (WEBrick) starten ruby\cookbook> ruby script/server http://localhost:3000/
Ruby on Rails Projekt konfigurieren Datenbank Konfiguration cookbook/config/database.yml Server (WEBrick) neustarten ruby script/server http://localhost:3000/
Ruby on Rails Projekt konfigurieren Datenbank anlegen DB: cookbook Tb: recipes Model generieren ruby\cookbook> ruby script/generate model Recipe
Ruby on Rails Projekt konfigurieren Datenbank anlegen DB: cookbook Tb: recipes Conroller generieren ruby\cookbook> ruby script/generate controller Recipe
Ruby on Rails RoR Editoren SciTE 3rdRail Aptana jEdit Eclipse vim emacs RadRails
Ruby on Rails ROR Vorteile + Sehr schnelle Ergebnisse v.a bei CRUD Applikationen + nimmt Entwicklern Routinearbeiten ab + Automatische Verwendung von Best Practices
Ruby on Rails ROR Vorteile + Organisierte Struktur der Anwendung + Viel Unterstützung durch freiwillige  Supporter und Programmierer + Code läuft auf verschiedenen Plattformen  mit minimalen Anpassungen
Ruby on Rails ROR Vorteile + 10-mal schnellere Ergebnisse als vergleichbare  Java Framworks + Source-Code bleibt schlank –  ca. 50% kleiner als ein vergleichbares PHP-Programm + Wartung der Software wird durch MVC, DRY, OOP  viel einfacher, speziell bei großen Projekten
Ruby on Rails ROR Vorteile + Integriertes Test-Framework unterstützt automatisiertes  Testen der Applikation. Dadurch können Fehlfunktionen  von Anfang an minimiert werden + Web-Sicherheit ist integraler Bestandteil von Ruby on Rails + Web-2.0 (Ajax) fähig
Ruby on Rails ROR Nachteile - Völlige Abhängigkeit vom Framework - Je spezieller die Applikation, je weniger Vorteile - Teilweise erheblicher Erstaufwand - (noch) nicht sehr weit verbreitet (Hosting)
Ruby on Rails ROR Nachteile - Deployment ist kompliziert - Größtes Problem: Performance & Skalierbarkeit - Teilweise erheblicher Erstaufwand - (noch) nicht sehr weit verbreitet (Hosting)
Ruby on Rails Lernen von Rails Entwickeln nach Code Standards und Best Practices Convention over Configuration - MVC, DRY Ansatz für Webanwendungen - Test Driven Development - Einsatz von OOP
Ruby on Rails Ruby on Rails ressourcen
Ruby on Rails WWW - rubyonrails.com/ - wiki.rubyonrails.org/rails - api.rubyonrails.org/ - (noch) nicht sehr weit verbreitet (Hosting)
Ruby on Rails Bücher Agile Web Development with Rails – DHH - Rails Recipes – Chad Fowler -  why's (poignant) guide to Ruby -  http://poignantguide.net/ruby/
Ruby on Rails Q & A

Ruby On Rails Einführung

  • 1.
    Ruby on RailsRuby on Rails http://reinholdweber.com – reinhold.weber@gmx.net
  • 2.
    Ruby on RailsInhalt Einführende Beispiele Ruby Rails Live Beispiel
  • 3.
    Ruby on RailsRuby Interpretierte, objektorientierte & dynamisch typisierte Skriptsprache Rails Fullstack MVC WebApplication Framework
  • 4.
    Ruby on Rails„ Makes Php look like Assembler “ Ruby IRC Channel
  • 5.
    Ruby on Rails„ Nachahmung ist die höchste Form der Anerkennung “
  • 6.
    Ruby on RailsRails Nachbildungen in PHP solar Seagull Zend Framework symfony CakePHP Prado ZooP WACT CodeIgniter
  • 7.
    Ruby on RailsLibrary Modul, das eine bestimmte Funktionalität anbietet eZComponents / PEAR Plattform, auf der man seine Anwendung aufbauen kann Ruby on Rails / CakePHP / .NET / Django Framework
  • 8.
    Ruby on RailsBasecamp Twitter Mephisto Measuremap Odeo Highrise 43 Places Backpack shopify Rails Anwendungen
  • 9.
    Ruby on RailsRuby eine dynamische, freie Programmiersprache, die sich einfach anwenden und produktiv einsetzen lässt. Sie hat eine elegante Syntax , die man leicht lesen und schreiben kann.
  • 10.
    Ruby on RailsRuby - Japan 1995, Yukihiro Matsumoto - Open Source - Mischung aus Perl, Smalltalk, Eiffel, Ada und Lisp - Hohe Qualität der Bibliotheken - Wenige aber hochwertige Literatur
  • 11.
    Ruby on RailsRuby charakteristika
  • 12.
    Ruby on RailsRuby - Generisch, interpretiert, reflektiert, mit Garbage Collector - Eher auf Menschen als auf Computer optimiert - Mächtiger als Perl, objektorientierter als Python - Alles ist ein Objekt, keine primitiven Datentypen - Starke dynamische Typisierung
  • 13.
    Ruby on RailsAlles ist ein Objekt String = String.new 5.times do puts „Hello World“ end Hello World Hello World Hello World Hello World Hello World => 5
  • 14.
    Ruby on RailsAlles ist ein Objekt 1.upto(100) { |i| puts i } 3.141.ceil 2.718.floor 1 2 3 … 100 => 1 => 4 => 2
  • 15.
    Ruby on RailsAlles ist ein Objekt rand.to_s [2..10] validates_each :href, :on => :create do |record, attr, value| begin uri = URI.parse(value) if uri.class != URI::HTTP record.errors.add(attr, 'Only HTTP protocol addresses can be used') end rescue URI::InvalidURIError record.errors.add(attr, 'The format of the url is not valid.') end end 8digit long random number
  • 16.
    Ruby on RailsAlles ist ein Objekt class Auto def beschleunigen puts 'Brumm' end end auto1 = Auto.new auto1.beschleunigen Brumm => nil
  • 17.
    Ruby on RailsAlles ist ein Objekt class GutesAuto < Auto def bremsen puts 'Quietsch' end end auto2 = GutesAuto.new auto2.beschleunigen auto2.bremsen Brumm Quietsch => nil
  • 18.
    Ruby on RailsRuby Syntax a = [1, 'hi', 3.14, 1, 2, [4, 5]] a[2] # 3.14 a.reverse # [[4, 5], 2, 1, 3.14, 'hi', 1] a.flatten.uniq # [1, 'hi', 3.14, 2, 4, 5]
  • 19.
    Ruby on RailsPHP  Ruby Gemeinsamkeiten + auch dynamisch typisiert + es gibt Klassen und Zugriffsmodifizierer (public, protected, private) + heredoc Syntax - Exceptions wie in PHP 5
  • 20.
    Ruby on RailsPHP  Ruby Gemeinsamkeiten + große Standardbibliothek + true und false wie in PHP, null = nil + einige Variablen beginnen mit $ + String Interpolation „ $foo is a $bar” --- ”#{foo} is a #{bar}”
  • 21.
    Ruby on RailsPHP  Ruby Unterschiede - hat strenge Typisierung to_s, to_i - Strings, Zahlen, Arrays und Hashes sind Objekte Statt abs(-1) hier -1.abs - Klammern in Methodenaufrufen sind optional - keine abstract oder interface Klassen
  • 22.
    Ruby on RailsJava  Ruby Gemeinsamkeiten + Speicher wird von einem Garbage-Collector verwaltet + Werkzeuge zur Dokumentation: RDoc + Objekte sind stark getypt + es gibt Klassen und Zugriffsmodifizierer (public, protected, private)
  • 23.
    Ruby on RailsJava  Ruby Unterschiede - muss nicht kompiliert werden - verschiedene GUI Toolkits z.B. WxRuby - require statt import - Klammern in Methodenaufrufen optional get_books
  • 24.
    Ruby on RailsJava  Ruby Unterschiede - Alle Instanzvariablen sind privat, Zugriff nur über Methoden - Keine statische Typprüfung - keine Typdeklarationen notwendig a = [1,2,3] statt int[] a = [1,2,3]; - keine Typumwandlung (Typecasting)
  • 25.
    Ruby on RailsJava  Ruby Unterschiede - Konstruktor heißt immer initialize anstatt Klassenname - Mixins anstelle von Interfaces - self anstatt this - Unit-Testing noch einfacher
  • 26.
    Ruby on RailsRails - Dänemark 2004, David Heinemeier Hansson - Open Source MIT Lizenz - 15 Core Entwickler - Fullstack MVC WebFramework - Wurde aus bestehender Anwendung extrahiert
  • 27.
    Ruby on RailsRuby on Rails philosophie
  • 28.
    Ruby on RailsRuby on Rails Die 1. Regel im Rails Club lautet: Don‘t repeat yourself
  • 29.
    Ruby on RailsRuby on Rails Die 2. Regel im Rails Club lautet: Don‘t repeat yourself
  • 30.
    Ruby on RailsDRY &quot;Don't repeat yourself&quot;- Prinzip (DRY): Bsp: In Rails ist kein explizites Datenbankschema nötig, um mit der Datenbank zu kommunizieren, da die Datenbank direkt ausgewertet wird.
  • 31.
    Ruby on RailsMVC Best practices REST Convention over configuration DRY OOP Active Record CRUD
  • 32.
    Ruby on RailsMVC Rails verwendet das Modell-View-Controller-Muster (MVC), welches die Schichten der Anwendung sauber in Verantwortungsbereiche aufteilt
  • 33.
    Ruby on RailsMVC Das Model bildet die zugrundeliegende Datenstruktur Die View ist die Darstellung der Datenstruktur Der Controller enthält die eigentliche Programmlogik
  • 34.
    Ruby on RailsMVC Model Controller Browser View Database
  • 35.
    Ruby on RailsM VC - Model Das Model bildet die zugrundeliegende Datenstruktur Die View ist die Darstellung der Datenstruktur Der Controller enthält die eigentliche Programmlogik
  • 36.
    Ruby on RailsActive Record ein Object-Relational Mapper (ORM) Klasse  Datenbanktabelle Methoden  Datenbankfelder Objekt  Datensatz
  • 37.
    Ruby on RailsActive Record Patient +name +email +date_of_birth +age +gender  Datenbank
  • 38.
    Ruby on RailsActive Record::Base#Find class Patient< ActiveRecord::Base end Patient.find(1) SELECT * FROM patients WHERE id = 1 Patient.count SELECT COUNT(*) AS count Patient.find_by_name ‘Reinhold Weber‘ SELECT * FROM patients WHERE name = ‚Reinhold Weber‘ Patient.find_by_date_of_birth ‘1985-07-08‘ SELECT * FROM patients WHERE date_of_birth = ‚1985-07-08‘
  • 39.
    Ruby on RailsModels class Patient< ActiveRecord::Base end class Encounter< ActiveRecord::Base end class Physician< ActiveRecord::Base end
  • 40.
    Ruby on RailsAssociations class Patient< ActiveRecord::Base has_many :encounters has_many :physicians, :through => :encounters end class Encounter< ActiveRecord::Base belongs_to :patient belongs_to :physician end class Physician< ActiveRecord::Base has_many :encounters has_many :patients, :through => :encounters end
  • 41.
    Ruby on RailsSensible Defaults class Patient < ActiveRecord::Base has_many :encounters, :class_name => 'Encounter', :foreign_key => 'patient_id' has_many :physicians, :through => encounters, :class_name => 'Physician', :foreign_key => 'physician_id' end
  • 42.
    Ruby on RailsSensible Defaults class Encounter < ActiveRecord::Base belongs_to :patient, :class_name => 'Patient', :foreign_key => 'patient_id' belongs_to :physician, :class_name => 'Physician', :foreign_key => 'physician_id' end
  • 43.
    Ruby on RailsSensible Defaults class Physician < ActiveRecord::Base has_many :encounters, :class_name => 'Encounter', :foreign_key => 'patient_id' has_many :patients, :through :encounters :class_name => 'Patient', :foreign_key => 'patient_id' end
  • 44.
    Ruby on RailsM V C - View Das Model bildet die zugrundeliegende Datenstruktur Die View ist die Darstellung der Datenstruktur Der Controller enthält die eigentliche Programmlogik
  • 45.
    Ruby on RailsView Modul aus der ActionPack Bibliothek welches eine Antwort für den Client rendert entscheidet, welches Template und/oder Partial und Layout benutzt wird Templates benutzen helper Methoden um Links, Formulare und JavaScript zu generieren und Text zu formatiieren
  • 46.
    Ruby on RailsTemplates Vorlagen befinden sich in app/view/controller_name, . Z.B. die Vorlagen für start::PatientController befinden sich unter app/views/start/patient Vorlagen, die von mehreren Controllern benutzt werden befinden sich in app/views/shared
  • 47.
    Ruby on RailsTemplates rhtml - die am häufigsten vorkommende Variante für HTML. HTML Dateien mit eingebettetem Ruby, die die ERb Bibliothek benutzen rxml - Dateien mit Ruby code, die die Builder Bibliothek benutzen um XML zu generieren, wird normalerweise für RSS/Atom benutzt rjs - Ruby Code mit einer Rails spezifischen API, die JavaScript generiert. Wird benutzt für AJAX
  • 48.
    Ruby on RailsPartials Partials sind Templates, die nur einen Teil einer Seite generieren wie z.B. einen Header oder Footer Partials helfen dabei Seitenelemente wiederzuverwenden funktionieren genauso wie Page Templates (views), laufen in derselben Umgebung und sind im selben Verzeichnis Dateinamen beginnen mit einem underscore _header
  • 49.
    Ruby on RailsHelpers Helpers sind Ruby Module mit Methoden, die in den Templates verfügbar sind Helpers können Duplikate verhindern und minimieren den Code in den Templates Jeder Controller hat per default einen korrespondierenden helper unter app/helpers/controller_name_helper.rb
  • 50.
    Ruby on RailsView <html> <head> <title><%= @title %></title> </head> <body> <h1><%= @homepage_title %></h1> <strong>Patient:</strong> <li>Name: <%= @patient.name %></li> <%= render :partial => 'patient_details' %> </body> </html>
  • 51.
    Ruby on RailsMV C - Controller Das Model bildet die zugrundeliegende Datenstruktur Die View ist die Darstellung der Datenstruktur Der Controller enthält die eigentliche Programmlogik
  • 52.
    Ruby on RailsAction Controller Trennung von Business Logik & Präsentation Idealerweise sollte keinerlei Logik in der Präsentationsschicht sein Controller sind Ruby Klassen und befinden sich in app/controllers
  • 53.
    Ruby on RailsAction Controller class PatientController < ApplicationController def index @patient = Patient.find :first @title = 'Patient Detail' @homepage_title = &quot;Patient: #{@patient.name}&quot; end end
  • 54.
    Ruby on RailsIntelligente Architektur Jede Rails-Anwendung hat eine identische Dateistruktur, es sind kaum Konfigurationsanpassungen nötig.
  • 55.
    Ruby on RailsStruktur app/ components/ config/ db/ doc/ lib/ log/ public/ script/ test/ tmp/ vendor/ ruby projekt1
  • 56.
    Ruby on RailsScaffolding Mit wenigen Befehlen kann eine komplette Administrationsoberfläche zum Erstellen, Bearbeiten und Löschen von Datenbankeinträgen erstellt werden. Rails erzeugt automatisch den Programm- und HTML-Code, der sukzessive um individuelle Funktionalität erweitert werden kann.
  • 57.
    Ruby on RailsScaffolding Klasse  Datenbanktabelle Methoden  Datenbankfelder Objekt  Datensatz
  • 58.
    Ruby on RailsKonvention über Konfiguration DB Tabelle ‚entries‘  Klasse ‚Entry‘
  • 59.
    Ruby on RailsMigrations Ein Weg das Datenbankschema zu entwickeln Migrations benutzen eine datenbankunabhängige Ruby API Migration Klassen erben von ActiveRecord::Migration script/generate migration
  • 60.
    Ruby on RailsCRUD Create: create, new Read: find, find_by_<attr> Update: save, update_attributes Delete: destroy
  • 61.
    Ruby on RailsSchnelles Feedback Ruby-Code wird zur Laufzeit interpretiert, Live-Änderungen an der Datenbankstruktur sind während der Entwicklung ohne Server-Neustart möglich.
  • 62.
    Ruby on RailsWeb 2.0 inklusive Techniken wie AJAX und visuelle Effekte sind von Haus aus mit wenigen Zeilen nutzbar.. Ajax Eye Candy
  • 63.
    Ruby on RailsRuby on Rails installation
  • 64.
    Ruby on RailsInstallation Instant Rails/ Locomotive  Windows MacPorts/ Quellen  Mac Quellen  Linux
  • 65.
    Ruby on RailsInstallation Ruby rubyonrails.org/down Windows Installer runterladen, welcher Ruby und einige Extensions enthält - Alle Komponenten installieren
  • 66.
    Ruby on RailsInstallation Rails Installierte Ruby Version ausgeben ruby -v Über RubyGem, das Paketverwaltungssystem von Ruby, Rails installieren gem install rails --include-dependencies
  • 67.
    Ruby on RailsProjekt anlegen Neues Projekt erzeugen ruby> rails cookbook Server (WEBrick) starten ruby\cookbook> ruby script/server http://localhost:3000/
  • 68.
    Ruby on RailsProjekt konfigurieren Datenbank Konfiguration cookbook/config/database.yml Server (WEBrick) neustarten ruby script/server http://localhost:3000/
  • 69.
    Ruby on RailsProjekt konfigurieren Datenbank anlegen DB: cookbook Tb: recipes Model generieren ruby\cookbook> ruby script/generate model Recipe
  • 70.
    Ruby on RailsProjekt konfigurieren Datenbank anlegen DB: cookbook Tb: recipes Conroller generieren ruby\cookbook> ruby script/generate controller Recipe
  • 71.
    Ruby on RailsRoR Editoren SciTE 3rdRail Aptana jEdit Eclipse vim emacs RadRails
  • 72.
    Ruby on RailsROR Vorteile + Sehr schnelle Ergebnisse v.a bei CRUD Applikationen + nimmt Entwicklern Routinearbeiten ab + Automatische Verwendung von Best Practices
  • 73.
    Ruby on RailsROR Vorteile + Organisierte Struktur der Anwendung + Viel Unterstützung durch freiwillige Supporter und Programmierer + Code läuft auf verschiedenen Plattformen mit minimalen Anpassungen
  • 74.
    Ruby on RailsROR Vorteile + 10-mal schnellere Ergebnisse als vergleichbare Java Framworks + Source-Code bleibt schlank – ca. 50% kleiner als ein vergleichbares PHP-Programm + Wartung der Software wird durch MVC, DRY, OOP viel einfacher, speziell bei großen Projekten
  • 75.
    Ruby on RailsROR Vorteile + Integriertes Test-Framework unterstützt automatisiertes Testen der Applikation. Dadurch können Fehlfunktionen von Anfang an minimiert werden + Web-Sicherheit ist integraler Bestandteil von Ruby on Rails + Web-2.0 (Ajax) fähig
  • 76.
    Ruby on RailsROR Nachteile - Völlige Abhängigkeit vom Framework - Je spezieller die Applikation, je weniger Vorteile - Teilweise erheblicher Erstaufwand - (noch) nicht sehr weit verbreitet (Hosting)
  • 77.
    Ruby on RailsROR Nachteile - Deployment ist kompliziert - Größtes Problem: Performance & Skalierbarkeit - Teilweise erheblicher Erstaufwand - (noch) nicht sehr weit verbreitet (Hosting)
  • 78.
    Ruby on RailsLernen von Rails Entwickeln nach Code Standards und Best Practices Convention over Configuration - MVC, DRY Ansatz für Webanwendungen - Test Driven Development - Einsatz von OOP
  • 79.
    Ruby on RailsRuby on Rails ressourcen
  • 80.
    Ruby on RailsWWW - rubyonrails.com/ - wiki.rubyonrails.org/rails - api.rubyonrails.org/ - (noch) nicht sehr weit verbreitet (Hosting)
  • 81.
    Ruby on RailsBücher Agile Web Development with Rails – DHH - Rails Recipes – Chad Fowler - why's (poignant) guide to Ruby - http://poignantguide.net/ruby/
  • 82.