SlideShare ist ein Scribd-Unternehmen logo
1 von 82
Ruby on Rails Ruby on Rails http://reinholdweber.com   – reinhold.weber@gmx.net
Ruby on Rails ,[object Object],[object Object],[object Object],[object Object],[object Object]
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 ,[object Object],[object Object]
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 ,[object Object],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 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Ruby on Rails Templates ,[object Object],[object Object],[object Object],[object Object],[object Object]
Ruby on Rails Templates ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Ruby on Rails Partials ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Ruby on Rails Helpers ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
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 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
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 ,[object Object],[object Object],[object Object],[object Object]
Ruby on Rails Installation Rails ,[object Object],[object Object],[object Object],[object Object],[object Object]
Ruby on Rails Projekt anlegen ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Ruby on Rails Projekt konfigurieren ,[object Object],[object Object],[object Object],[object Object],[object Object]
Ruby on Rails Projekt konfigurieren ,[object Object],[object Object],[object Object],[object Object]
Ruby on Rails Projekt konfigurieren ,[object Object],[object Object],[object Object],[object Object]
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 ,[object Object],[object Object],[object Object],[object Object],[object Object]
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 ,[object Object],[object Object],[object Object]
Ruby on Rails Q & A

Weitere ähnliche Inhalte

Ähnlich wie Ruby On Rails Einführung

Ruby und Rails für .NET Entwickler
Ruby und Rails für .NET EntwicklerRuby und Rails für .NET Entwickler
Ruby und Rails für .NET EntwicklerNETUserGroupBern
 
An Introduction to Ruby On Rails
An Introduction to Ruby On RailsAn Introduction to Ruby On Rails
An Introduction to Ruby On RailsJonathan Weiss
 
Ruby on Rails in a metro session
Ruby on Rails in a metro sessionRuby on Rails in a metro session
Ruby on Rails in a metro sessionVirttoo org
 
Ist GraphQL das bessere REST
Ist GraphQL das bessere RESTIst GraphQL das bessere REST
Ist GraphQL das bessere RESTMartin Abraham
 
Liquid - Templating on Rails
Liquid - Templating on RailsLiquid - Templating on Rails
Liquid - Templating on Railsgearwheeldotnet
 
Dokumentenorientiere Datenbanken am Beispiel CouchDB
Dokumentenorientiere Datenbanken am Beispiel CouchDBDokumentenorientiere Datenbanken am Beispiel CouchDB
Dokumentenorientiere Datenbanken am Beispiel CouchDBMario Müller
 
6 - Sprachen des Semantic Web - RDF(S) Frameworks
6 - Sprachen des Semantic Web - RDF(S) Frameworks6 - Sprachen des Semantic Web - RDF(S) Frameworks
6 - Sprachen des Semantic Web - RDF(S) FrameworksSteffen Schloenvoigt
 
Opscode Chef - Grundlagen
Opscode Chef - GrundlagenOpscode Chef - Grundlagen
Opscode Chef - GrundlagenAvarteq
 
Domain Driven Design in Rails
Domain Driven Design in RailsDomain Driven Design in Rails
Domain Driven Design in RailsAngelo Maron
 
Übersicht Skriptsprachen
Übersicht SkriptsprachenÜbersicht Skriptsprachen
Übersicht SkriptsprachenA. LE
 
Ruby On Rails Hermann Stern Bcklu
Ruby On Rails Hermann Stern BckluRuby On Rails Hermann Stern Bcklu
Ruby On Rails Hermann Stern BckluHermann.Stern
 
Metaprogrammierung und Reflection
Metaprogrammierung und ReflectionMetaprogrammierung und Reflection
Metaprogrammierung und ReflectionStefan Marr
 
The Lotus Code Cookbook
The Lotus Code CookbookThe Lotus Code Cookbook
The Lotus Code CookbookUlrich Krause
 
An Introduction to Ruby
An Introduction to RubyAn Introduction to Ruby
An Introduction to RubyJonathan Weiss
 
Webinar - ABAP 7.50 Releaseabhängige Änderungen
Webinar - ABAP 7.50 Releaseabhängige ÄnderungenWebinar - ABAP 7.50 Releaseabhängige Änderungen
Webinar - ABAP 7.50 Releaseabhängige ÄnderungenCadaxo GmbH
 

Ähnlich wie Ruby On Rails Einführung (20)

Ruby und Rails für .NET Entwickler
Ruby und Rails für .NET EntwicklerRuby und Rails für .NET Entwickler
Ruby und Rails für .NET Entwickler
 
An Introduction to Ruby On Rails
An Introduction to Ruby On RailsAn Introduction to Ruby On Rails
An Introduction to Ruby On Rails
 
Ruby on Rails in a metro session
Ruby on Rails in a metro sessionRuby on Rails in a metro session
Ruby on Rails in a metro session
 
Ist GraphQL das bessere REST
Ist GraphQL das bessere RESTIst GraphQL das bessere REST
Ist GraphQL das bessere REST
 
Liquid - Templating on Rails
Liquid - Templating on RailsLiquid - Templating on Rails
Liquid - Templating on Rails
 
Web Entwicklung mit PHP - Teil 1
Web Entwicklung mit PHP - Teil 1Web Entwicklung mit PHP - Teil 1
Web Entwicklung mit PHP - Teil 1
 
Dokumentenorientiere Datenbanken am Beispiel CouchDB
Dokumentenorientiere Datenbanken am Beispiel CouchDBDokumentenorientiere Datenbanken am Beispiel CouchDB
Dokumentenorientiere Datenbanken am Beispiel CouchDB
 
6 - Sprachen des Semantic Web - RDF(S) Frameworks
6 - Sprachen des Semantic Web - RDF(S) Frameworks6 - Sprachen des Semantic Web - RDF(S) Frameworks
6 - Sprachen des Semantic Web - RDF(S) Frameworks
 
Opscode Chef - Grundlagen
Opscode Chef - GrundlagenOpscode Chef - Grundlagen
Opscode Chef - Grundlagen
 
Ruby on Rails SS09 06
Ruby on Rails SS09 06Ruby on Rails SS09 06
Ruby on Rails SS09 06
 
Ruby on Rails SS09 03
Ruby on Rails SS09 03Ruby on Rails SS09 03
Ruby on Rails SS09 03
 
Ruby on Rails
Ruby on RailsRuby on Rails
Ruby on Rails
 
Domain Driven Design in Rails
Domain Driven Design in RailsDomain Driven Design in Rails
Domain Driven Design in Rails
 
Übersicht Skriptsprachen
Übersicht SkriptsprachenÜbersicht Skriptsprachen
Übersicht Skriptsprachen
 
Ruby on Rails SS09 11
Ruby on Rails SS09 11Ruby on Rails SS09 11
Ruby on Rails SS09 11
 
Ruby On Rails Hermann Stern Bcklu
Ruby On Rails Hermann Stern BckluRuby On Rails Hermann Stern Bcklu
Ruby On Rails Hermann Stern Bcklu
 
Metaprogrammierung und Reflection
Metaprogrammierung und ReflectionMetaprogrammierung und Reflection
Metaprogrammierung und Reflection
 
The Lotus Code Cookbook
The Lotus Code CookbookThe Lotus Code Cookbook
The Lotus Code Cookbook
 
An Introduction to Ruby
An Introduction to RubyAn Introduction to Ruby
An Introduction to Ruby
 
Webinar - ABAP 7.50 Releaseabhängige Änderungen
Webinar - ABAP 7.50 Releaseabhängige ÄnderungenWebinar - ABAP 7.50 Releaseabhängige Änderungen
Webinar - ABAP 7.50 Releaseabhängige Änderungen
 

Ruby On Rails Einführung

  • 1. Ruby on Rails Ruby on Rails http://reinholdweber.com – reinhold.weber@gmx.net
  • 2.
  • 3. Ruby on Rails Ruby 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 Rails Rails Nachbildungen in PHP solar Seagull Zend Framework symfony CakePHP Prado ZooP WACT CodeIgniter
  • 7. 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
  • 8. Ruby on Rails Basecamp Twitter Mephisto Measuremap Odeo Highrise 43 Places Backpack shopify Rails Anwendungen
  • 9. 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.
  • 10. 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
  • 11. Ruby on Rails Ruby charakteristika
  • 12. 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
  • 13. 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
  • 14. 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
  • 15.
  • 16. Ruby on Rails Alles ist ein Objekt class Auto def beschleunigen puts 'Brumm' end end auto1 = Auto.new auto1.beschleunigen Brumm => nil
  • 17. 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
  • 18. 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]
  • 19. Ruby on Rails PHP  Ruby Gemeinsamkeiten + auch dynamisch typisiert + es gibt Klassen und Zugriffsmodifizierer (public, protected, private) + heredoc Syntax - Exceptions wie in PHP 5
  • 20. 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}”
  • 21. 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
  • 22. 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)
  • 23. 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
  • 24. 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)
  • 25. Ruby on Rails Java  Ruby Unterschiede - Konstruktor heißt immer initialize anstatt Klassenname - Mixins anstelle von Interfaces - self anstatt this - Unit-Testing noch einfacher
  • 26. 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
  • 27. Ruby on Rails Ruby on Rails philosophie
  • 28. Ruby on Rails Ruby on Rails Die 1. Regel im Rails Club lautet: Don‘t repeat yourself
  • 29. Ruby on Rails Ruby on Rails Die 2. Regel im Rails Club lautet: Don‘t repeat yourself
  • 30. 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.
  • 31. Ruby on Rails MVC Best practices REST Convention over configuration DRY OOP Active Record CRUD
  • 32. Ruby on Rails MVC Rails verwendet das Modell-View-Controller-Muster (MVC), welches die Schichten der Anwendung sauber in Verantwortungsbereiche aufteilt
  • 33. Ruby on Rails MVC Das Model bildet die zugrundeliegende Datenstruktur Die View ist die Darstellung der Datenstruktur Der Controller enthält die eigentliche Programmlogik
  • 34. Ruby on Rails MVC Model Controller Browser View Database
  • 35. 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
  • 36.
  • 37. Ruby on Rails Active Record Patient +name +email +date_of_birth +age +gender  Datenbank
  • 38. 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‘
  • 39. Ruby on Rails Models class Patient< ActiveRecord::Base end class Encounter< ActiveRecord::Base end class Physician< ActiveRecord::Base end
  • 40. 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
  • 41. 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
  • 42. 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
  • 43. 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
  • 44. 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
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50. 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>
  • 51. 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
  • 52.
  • 53. 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
  • 54. Ruby on Rails Intelligente Architektur Jede Rails-Anwendung hat eine identische Dateistruktur, es sind kaum Konfigurationsanpassungen nötig.
  • 55. Ruby on Rails Struktur app/ components/ config/ db/ doc/ lib/ log/ public/ script/ test/ tmp/ vendor/ ruby projekt1
  • 56. 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.
  • 57. Ruby on Rails Scaffolding Klasse  Datenbanktabelle Methoden  Datenbankfelder Objekt  Datensatz
  • 58. Ruby on Rails Konvention über Konfiguration DB Tabelle ‚entries‘  Klasse ‚Entry‘
  • 59. 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
  • 60. Ruby on Rails CRUD Create: create, new Read: find, find_by_<attr> Update: save, update_attributes Delete: destroy
  • 61. 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.
  • 62. Ruby on Rails Web 2.0 inklusive Techniken wie AJAX und visuelle Effekte sind von Haus aus mit wenigen Zeilen nutzbar.. Ajax Eye Candy
  • 63. Ruby on Rails Ruby on Rails installation
  • 64. Ruby on Rails Installation Instant Rails/ Locomotive  Windows MacPorts/ Quellen  Mac Quellen  Linux
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71. Ruby on Rails RoR Editoren SciTE 3rdRail Aptana jEdit Eclipse vim emacs RadRails
  • 72. Ruby on Rails ROR Vorteile + Sehr schnelle Ergebnisse v.a bei CRUD Applikationen + nimmt Entwicklern Routinearbeiten ab + Automatische Verwendung von Best Practices
  • 73. 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
  • 74. 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
  • 75. 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
  • 76. 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)
  • 77. Ruby on Rails ROR Nachteile - Deployment ist kompliziert - Größtes Problem: Performance & Skalierbarkeit - Teilweise erheblicher Erstaufwand - (noch) nicht sehr weit verbreitet (Hosting)
  • 78.
  • 79. Ruby on Rails Ruby on Rails ressourcen
  • 80. Ruby on Rails WWW - rubyonrails.com/ - wiki.rubyonrails.org/rails - api.rubyonrails.org/ - (noch) nicht sehr weit verbreitet (Hosting)
  • 81.
  • 82. Ruby on Rails Q & A