Ruby On Rails Einführung
Introduction to the Ruby on Rails Web Framework (German)
10924 views | comments | 7 favorites | 218 downloads | 13 embeds (Stats)
More Info
This slideshow is Public
Total Views: 10924 on Slideshare: 9828 from embeds: 1096
Most viewed embeds (Top 5):
More
Slideshow Transcript
- Slide 1: Ruby
on
Rails
http://reinholdweber.com – reinhold.weber@gmx.net
Ruby on Rails
- Slide 2: Inhalt
3.Einführende Beispiele
4.Ruby
5.Rails
6.Live Beispiel
Ruby on Rails
- Slide 3: Ruby
Interpretierte, objektorientierte &
dynamisch typisierte Skriptsprache
Rails
Fullstack MVC WebApplication Framework
Ruby on Rails
- Slide 4: „ Makes
Php
look like
Assembler “
Ruby IRC Channel
Ruby on Rails
- Slide 5: „ Nachahmung
ist die höchste
Form der
Anerkennung “
Ruby on Rails
- Slide 6: Rails Nachbildungen in PHP
CakePHP
symfony ZooP
solar Seagull
WACT
Prado
Zend Framework
CodeIgniter
Ruby on Rails
- Slide 7: Library
Modul, das eine bestimmte Funktionalität anbietet
eZComponents / PEAR
Framework
Plattform, auf der man seine Anwendung aufbauen kann
Ruby on Rails / CakePHP / .NET / Django
Ruby on Rails
- Slide 8: Rails Anwendungen
Highrise
Basecamp
Twitter
43 Places
Mephisto
Odeo shopify Backpack
Measuremap
Ruby on Rails
- Slide 9: Ruby
eine dynamische, freie Programmiersprache,
einfach anwenden und
die sich
produktiv einsetzen lässt.
Sie hat eine elegante Syntax, die man leicht
lesen und schreiben kann.
Ruby on Rails
- Slide 10: 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
- Slide 11: Ruby
charakteristika
Ruby on Rails
- Slide 12: 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
- Slide 13: Alles ist ein Objekt
String = String.new
5.times do Hello World
Hello World
puts „Hello World“ Hello World
Hello World
end Hello World
=> 5
Ruby on Rails
- Slide 14: Alles ist ein Objekt
1
2
1.upto(100) { |i| puts i } 3
…
100
=> 1
3.141.ceil => 4
2.718.floor => 2
Ruby on Rails
- Slide 15: Alles ist ein Objekt
8digit long
rand.to_s [2..10] random number
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
Ruby on Rails
- Slide 16: Alles ist ein Objekt
class Auto
def beschleunigen
puts 'Brumm'
end
Brumm
end => nil
auto1 = Auto.new
auto1.beschleunigen
Ruby on Rails
- Slide 17: Alles ist ein Objekt
class GutesAuto < Auto
def bremsen
puts 'Quietsch'
end
end Brumm
Quietsch
=> nil
auto2 = GutesAuto.new
auto2.beschleunigen
auto2.bremsen
Ruby on Rails
- Slide 18: 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
- Slide 19: PHP Ruby Gemeinsamkeiten
+ auch dynamisch typisiert
+ es gibt Klassen und Zugriffsmodifizierer
(public, protected, private)
+ heredoc Syntax
- Exceptions wie in PHP 5
Ruby on Rails
- Slide 20: 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
- Slide 21: 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
- Slide 22: 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
- Slide 23: 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
- Slide 24: 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
- Slide 25: Java Ruby Unterschiede
- Konstruktor heißt immer initialize anstatt Klassenname
- Mixins anstelle von Interfaces
- self anstatt this
- Unit-Testing noch einfacher
Ruby on Rails
- Slide 26: 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
- Slide 27: Ruby on Rails
philosophie
Ruby on Rails
- Slide 28: Ruby on Rails
Die 1. Regel im Rails Club lautet:
Don‘t repeat yourself
Ruby on Rails
- Slide 29: Ruby on Rails
Die 2. Regel im Rails Club lautet:
Don‘t repeat yourself
Ruby on Rails
- Slide 30: DRY
\"Don't repeat yourself\"-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
- Slide 31: MVC Active Record
DRY OOP
Best practices
Convention
CRUD
over configuration REST
Ruby on Rails
- Slide 32: MVC
Rails verwendet das Modell-View-Controller-Muster (MVC),
welches die Schichten der Anwendung
sauber in Verantwortungsbereiche aufteilt
Ruby on Rails
- Slide 33: MVC
Model bildet die zugrundeliegende Datenstruktur
Das
View ist die Darstellung der Datenstruktur
Die
Controller enthält die eigentliche Programmlogik
Der
Ruby on Rails
- Slide 34: MVC
Browser Controller
View Model
Database
Ruby on Rails
- Slide 35: MVC - Model
Model bildet die zugrundeliegende Datenstruktur
Das
View ist die Darstellung der Datenstruktur
Die
Controller enthält die eigentliche Programmlogik
Der
Ruby on Rails
- Slide 36: Active Record
-ein Object-Relational Mapper (ORM)
Klasse Datenbanktabelle
Methoden Datenbankfelder
Objekt Datensatz
Ruby on Rails
- Slide 37: Active Record
Patient
+name
Datenbank
+email
+date_of_birth
+age
+gender
Ruby on Rails
- Slide 38: 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
- Slide 39: Models
class Patient< ActiveRecord::Base
end
class Encounter< ActiveRecord::Base
end
class Physician< ActiveRecord::Base
end
Ruby on Rails
- Slide 40: 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
- Slide 41: 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
- Slide 42: 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
- Slide 43: 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
- Slide 44: MVC - View
Model bildet die zugrundeliegende Datenstruktur
Das
View ist die Darstellung der Datenstruktur
Die
Controller enthält die eigentliche Programmlogik
Der
Ruby on Rails
- Slide 45: 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
- Slide 46: 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
- Slide 47: 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
- Slide 48: 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
- Slide 49: 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
- Slide 50: 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
- Slide 51: MVC - Controller
Model bildet die zugrundeliegende Datenstruktur
Das
View ist die Darstellung der Datenstruktur
Die
Controller enthält die eigentliche Programmlogik
Der
Ruby on Rails
- Slide 52: 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
- Slide 53: Action Controller
class PatientController < ApplicationController
def index
@patient = Patient.find :first
@title = 'Patient Detail'
@homepage_title = \"Patient: #{@patient.name}\"
end
end
Ruby on Rails
- Slide 54: Intelligente
Architektur
Jede Rails-Anwendung hat eine identische Dateistruktur,
es sind kaum Konfigurationsanpassungen nötig.
Ruby on Rails
- Slide 55: app/
Struktur components/
config/
db/
doc/
lib/
ruby projekt1 log/
public/
script/
test/
tmp/
vendor/
Ruby on Rails
- Slide 56: 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
- Slide 57: Scaffolding
Klasse Datenbanktabelle
Methoden Datenbankfelder
Objekt Datensatz
Ruby on Rails
- Slide 58: Konvention über Konfiguration
DB Tabelle ‚entries‘
Klasse ‚Entry‘
Ruby on Rails
- Slide 59: 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
- Slide 60: CRUD
Create: create, new
Read: find, find_by_<attr>
Update: save, update_attributes
Delete: destroy
Ruby on Rails
- Slide 61: 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
- Slide 62: Web 2.0 Eye Candy
inklusive
Ajax
Techniken wie AJAX und visuelle Effekte
sind von Haus aus mit wenigen Zeilen nutzbar..
Ruby on Rails
- Slide 63: Ruby on Rails
installation
Ruby on Rails
- Slide 64: Installation
Instant Rails/ Locomotive Windows
MacPorts/ Quellen Mac
Quellen Linux
Ruby on Rails
- Slide 65: Installation Ruby
-rubyonrails.org/down
-Windows Installer runterladen, welcher
Ruby und einige Extensions enthält
- Alle Komponenten installieren
Ruby on Rails
- Slide 66: Installation Rails
-Installierte Ruby Version ausgeben
ruby -v
-Über RubyGem, das Paketverwaltungssystem
von Ruby, Rails installieren
gem install rails --include-dependencies
Ruby on Rails
- Slide 67: Projekt anlegen
-Neues Projekt erzeugen
ruby> rails cookbook
-Server (WEBrick)
starten
ruby\\cookbook> ruby script/server
http://localhost:3000/
Ruby on Rails
- Slide 68: Projekt konfigurieren
-Datenbank Konfiguration
cookbook/config/database.yml
-Server (WEBrick) neustarten
ruby script/server
http://localhost:3000/
Ruby on Rails
- Slide 69: Projekt konfigurieren
-Datenbank anlegen
DB: cookbook Tb: recipes
-Model generieren
ruby\\cookbook> ruby script/generate model Recipe
Ruby on Rails
- Slide 70: Projekt konfigurieren
-Datenbank anlegen
DB: cookbook Tb: recipes
- Conroller generieren
ruby\\cookbook> ruby script/generate controller Recipe
Ruby on Rails
- Slide 71: RoR Editoren
jEdit Eclipse
SciTE 3rdRail
RadRails vim
Aptana emacs
Ruby on Rails
- Slide 72: ROR Vorteile
+ Sehr schnelle Ergebnisse v.a bei CRUD Applikationen
+ nimmt Entwicklern Routinearbeiten ab
+ Automatische Verwendung von Best Practices
Ruby on Rails
- Slide 73: 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
- Slide 74: 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
- Slide 75: 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
- Slide 76: 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
- Slide 77: ROR Nachteile
- Deployment ist kompliziert
- Größtes Problem: Performance & Skalierbarkeit
- Teilweise erheblicher Erstaufwand
- (noch) nicht sehr weit verbreitet (Hosting)
Ruby on Rails
- Slide 78: 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
- Slide 79: Ruby on Rails
ressourcen
Ruby on Rails
- Slide 80: WWW
- rubyonrails.com/
- wiki.rubyonrails.org/rails
- api.rubyonrails.org/
- (noch) nicht sehr weit verbreitet (Hosting)
Ruby on Rails
- Slide 81: 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
- Slide 82: Q&A
Ruby on Rails