Ruby On Rails Einführung
-
Upload
reinhold-weber -
Category
Technology
-
view
37.767 -
download
1
description
Transcript of Ruby On Rails Einführung
Ruby on Rails
Inhalt
1.Einführende Beispiele2.Ruby3.Rails4.Live Beispiel
Ruby on Rails
RubyInterpretierte, objektorientierte &dynamisch typisierte Skriptsprache
RailsFullstack MVC WebApplication Framework
Ruby on Rails
„ Makes
Phplook 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
symfonyCakePHP
Prado
ZooP
WACT
CodeIgniter
Ruby on Rails
LibraryModul, 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
BasecampTwitter Mephisto
MeasuremapOdeo
Highrise43 Places
Backpackshopify
Rails Anwendungen
Ruby on Rails
Rubyeine 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 WorldHello WorldHello WorldHello WorldHello World=> 5
Ruby on Rails
Alles ist ein Objekt
1.upto(100) { |i| puts i }
3.141.ceil
2.718.floor
123…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 longrandom number
Ruby on Rails
Alles ist ein Objekt
class Auto def beschleunigen puts 'Brumm' endend auto1 = Auto.newauto1.beschleunigen
Brumm=> nil
Ruby on Rails
Alles ist ein Objekt
class GutesAuto < Auto def bremsen puts 'Quietsch' endend auto2 = GutesAuto.newauto2.beschleunigenauto2.bremsen
BrummQuietsch=> nil
Ruby on Rails
Ruby Syntaxa = [1, 'hi', 3.14, 1, 2, [4, 5]] a[2] # 3.14a.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 optionalget_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"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
MVC
Best practicesREST
Conventionover configuration
DRY OOPActive Record
CRUD
Ruby on Rails
MVCRails verwendet das Modell-View-Controller-Muster (MVC), welches die Schichten der Anwendung sauber in Verantwortungsbereiche aufteilt
Ruby on Rails
MVCDas Model bildet die zugrundeliegende Datenstruktur
Die View ist die Darstellung der Datenstruktur
Der Controller enthält die eigentliche Programmlogik
Ruby on Rails
MVC
Model
ControllerBrowser
View
Database
Ruby on Rails
MVC - ModelDas 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 RecordPatient
+name+email+date_of_birth+age+gender
Datenbank
Ruby on Rails
Active Record::Base#Findclass Patient< ActiveRecord::Baseend Patient.find(1)SELECT * FROM patients WHERE id = 1
Patient.countSELECT 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
Modelsclass Patient< ActiveRecord::Baseend
class Encounter< ActiveRecord::Baseend
class Physician< ActiveRecord::Baseend
Ruby on Rails
Associationsclass Patient< ActiveRecord::Base has_many :encounters has_many :physicians, :through => :encounters end
class Encounter< ActiveRecord::Base belongs_to :patient belongs_to :physicianend
class Physician< ActiveRecord::Base has_many :encounters has_many :patients, :through => :encounters end
Ruby on Rails
Sensible Defaultsclass 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 Defaultsclass 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 Defaultsclass 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
MVC - ViewDas 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
MVC - ControllerDas 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 Controllerclass PatientController < ApplicationController def index @patient = Patient.find :first
@title = 'Patient Detail'@homepage_title = "Patient: #{@patient.name}"
endend
Ruby on Rails
Intelligente Architektur
Jede Rails-Anwendung hat eine identische Dateistruktur, es sind kaum Konfigurationsanpassungen nötig.
Ruby on Rails
Strukturapp/components/config/db/doc/lib/log/public/script/test/tmp/vendor/
ruby projekt1
Ruby on Rails
ScaffoldingMit 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
MigrationsEin Weg das Datenbankschema zu entwickeln
Migrations benutzen eine datenbankunabhängige Ruby API
Migration Klassen erben von ActiveRecord::Migration
script/generate migration
Ruby on Rails
CRUDCreate: 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.0inklusive
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
InstallationInstant 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
SciTE3rdRail
Aptana
jEdit Eclipse
vim
emacsRadRails
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