ruby on rails 3 - amazon simple storage service (s3) · pdf filehussein morsy, tanja otto ruby...

40
Hussein Morsy, Tanja Otto Ruby on Rails 3.1

Upload: buinguyet

Post on 06-Mar-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto

Ruby on Rails 3.1

Page 2: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Auf einen Blick

1 Einführung ................................................................ 21

2 Installation ............................................................... 33

3 Unsere erste Rails-Applikation ................................... 47

4 Einführung in Ruby ................................................... 57

5 Rails Schritt für Schritt entdecken .............................. 93

6 Testen mit Cucumber ................................................ 169

7 Rails-Projekte erstellen und konfigurieren .................. 191

8 Datenbankzugriff mit ActiveRecord ........................... 239

9 Steuerzentrale mit ActionController ........................... 331

10 Routing mit ActionDispatch ...................................... 351

11 HTML5, Sass und CoffeeScript mit ActionView .......... 371

12 E-Mails senden mit ActionMailer .............................. 447

13 Nützliche Helfer mit ActiveSupport ........................... 465

14 Webservices mit ActiveResource ............................... 481

15 Mehrsprachige Applikationen mit I18n ...................... 487

16 Unobtrusive JavaScript und Ajax mit jQuery .............. 501

17 Sicherheit, Deployment und

Optimierung durch Caching ...................................... 517

A Die wichtigsten Ruby-Klassen .................................... 553

Page 3: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 5 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: trennung , Aktueller Job: buch

Inhalt

Einleitung ..................................................................................................... 17

1 Einführung ............................................................................ 21

1.1 Wie entstand Rails? ................................................................ 211.2 Warum Ruby? .......................................................................... 221.3 Model View Controller .......................................................... 231.4 Persistenz .................................................................................. 241.5 Konvention statt Konfiguration ............................................ 251.6 Das DRY-Prinzip ...................................................................... 251.7 Neues in Rails 3.0 ................................................................... 261.8 Neues in Rails 3.1 .................................................................... 281.9 Top-Ten-Websites zu Ruby on Rails ..................................... 30

2 Installation ........................................................................... 33

2.1 Allgemeines .............................................................................. 332.2 Installation unter Mac OS X .................................................. 34

2.2.1 Compiler installieren ............................................. 352.2.2 Paketmanager Homebrew .................................... 352.2.3 Datenbanken installieren ..................................... 372.2.4 Ruby installieren mit »rbenv« .............................. 372.2.5 Rails installieren ..................................................... 40

2.3 Installation unter Windows .................................................. 402.4 Installation unter Linux .......................................................... 41

2.4.1 Basisinstallation mit »apt-get« ............................. 412.4.2 Datenbanken installieren ..................................... 422.4.3 Installation von »rbenv« ....................................... 42

2.5 Editoren und Entwicklungsumgebungen ............................ 432.5.1 TextMate ................................................................. 432.5.2 Sublime Text ........................................................... 432.5.3 Vim ........................................................................... 442.5.4 Emacs ....................................................................... 442.5.5 IntelliJ IDEA und RubyMine ................................ 442.5.6 Aptana ..................................................................... 452.5.7 Visual Studio ........................................................... 45

5

Page 4: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 6 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: trennung , Aktueller Job: buch

Inhalt

3 Unsere erste Rails-Applikation ....................................... 47

3.1 Eine Rails-Applikation erstellen ........................................... 473.2 Der lokale Rails-Server ........................................................... 483.3 Grundgerüst mit Scaffolds erstellen ..................................... 503.4 Die Applikation im Browser aufrufen .................................. 513.5 Startseite festlegen ................................................................. 543.6 HTTP-Authentifizierung ......................................................... 54

4 Einführung in Ruby ............................................................. 57

4.1 Was ist Ruby? .......................................................................... 574.1.1 Geschichte .............................................................. 574.1.2 Eigenschaften ......................................................... 584.1.3 Compiler oder Interpreter? .................................. 594.1.4 Ruby-Versionen ...................................................... 59

4.2 Ruby-Code ausführen ............................................................. 604.2.1 Quelltext ................................................................. 604.2.2 Interaktive Ruby Shell – »irb« .............................. 604.2.3 Im Webbrowser: Try Ruby .................................... 62

4.3 Grundlagen .............................................................................. 634.3.1 Syntax ...................................................................... 634.3.2 Variablen ................................................................. 644.3.3 Objekte und Datentypen ..................................... 654.3.4 Eine Frage des Stils ................................................ 70

4.4 Kontrollstrukturen .................................................................. 714.4.1 Verzweigungen ....................................................... 714.4.2 Mehrfachverzweigungen ...................................... 734.4.3 Rubys eigene Logik: true und false ..................... 744.4.4 Schleifen .................................................................. 754.4.5 Iteratoren ................................................................ 76

4.5 Klassen ...................................................................................... 774.5.1 Klassen definieren ................................................. 774.5.2 Automatische Accessoren .................................... 794.5.3 Initialisieren von Objekten ................................... 794.5.4 Zugriff auf Methoden ............................................ 804.5.5 Parameter ................................................................ 814.5.6 Operatoren sind Methoden ................................. 834.5.7 Konstanten in Klassen .......................................... 844.5.8 Klassenmethoden .................................................. 854.5.9 Sichtbarkeit ............................................................. 86

6

Page 5: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 7 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: trennung , Aktueller Job: buch

Inhalt

4.5.10 Vererbung ............................................................... 874.6 Module ..................................................................................... 89

4.6.1 Namensräume ........................................................ 894.6.2 Mixins ...................................................................... 90

5 Rails Schritt für Schritt entdecken ................................. 93

5.1 Rails-Projekt erstellen ............................................................ 945.1.1 Erstellung des Bookmarks-Controllers ............... 955.1.2 View erstellen ......................................................... 99

5.2 Weitere Views anlegen .......................................................... 1005.3 Layout ....................................................................................... 1025.4 Model ........................................................................................ 107

5.4.1 Migration ................................................................ 1095.4.2 ActiveRecord .......................................................... 1115.4.3 Datenbankzugriff in der Konsole testen ............ 111

5.5 CRUD (Create, Read, Update, Delete) ................................ 1165.6 Fehlerbehandlung in Formularen ......................................... 1325.7 Flash-Messages ....................................................................... 1355.8 Refaktorisierung mit Helper und Partials ............................ 138

5.8.1 Helper ...................................................................... 1385.8.2 Partials ..................................................................... 141

5.9 Authentifizierung .................................................................... 1435.10 Jeder User hat seine eigenen Bookmarks ........................... 1535.11 Mehrsprachigkeit mit I18n .................................................... 158

6 Testen mit Cucumber ......................................................... 169

6.1 Test Driven Development ...................................................... 1696.1.1 Was ist Cucumber? ................................................ 171

6.2 Eine Beispielapplikation ......................................................... 1716.2.1 Generierung der Cucumber-Dateien .................. 1726.2.2 Feature anlegen ..................................................... 1726.2.3 Erweiterungen ........................................................ 189

7 Rails-Projekte erstellen und konfigurieren .................. 191

7.1 Generieren eines Rails-Projektes .......................................... 1917.1.1 Verzeichnisstruktur einer Rails-Applikation ...... 1927.1.2 Datenbankoptionen .............................................. 195

7

Page 6: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 8 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: trennung , Aktueller Job: buch

Inhalt

7.1.3 JavaScript-Framework-Optionen ........................ 1977.1.4 Skip-Optionen ........................................................ 1987.1.5 Sonstige Optionen ................................................. 1997.1.6 EdgeRails ................................................................. 2007.1.7 Rails-Projekte mit einer Vorlage generieren ..... 200

7.2 RubyGems managen mit Bundler ........................................ 2027.2.1 RubyGems installieren .......................................... 2027.2.2 Gemfile .................................................................... 2037.2.3 Bundler .................................................................... 205

7.3 Konfiguration von Rails-Applikationen ............................... 2077.3.1 »application.rb« ...................................................... 2077.3.2 Initializers ................................................................ 2087.3.3 Umgebungseinstellungen ..................................... 2107.3.4 Datenbankkonfiguration ...................................... 212

7.4 Rails-Applikationen ausführen .............................................. 2157.4.1 Lokaler Server ......................................................... 2157.4.2 Rails-Konsole .......................................................... 2167.4.3 Logging .................................................................... 2177.4.4 Debugging ............................................................... 218

7.5 Rake-Tasks ................................................................................ 2207.5.1 Rake-Tasks ausführen ............................................ 2217.5.2 Rake-Tasks im Überblick ....................................... 2217.5.3 Eigene Rake-Tasks erstellen ................................. 225

7.6 Versionsverwaltung ................................................................ 2277.6.1 Ein Rails-Projekt mit Git verwalten .................... 2287.6.2 Ignorieren von Dateien und Verzeichnissen ..... 2297.6.3 Git-Befehle .............................................................. 2297.6.4 GitHub ..................................................................... 230

7.7 Generatoren ............................................................................. 2317.7.1 Verwendung ........................................................... 2317.7.2 Übersicht aller Generatoren ................................. 2327.7.3 Rückgängig machen .............................................. 2377.7.4 Generatoren konfigurieren ................................... 237

8 Datenbankzugriff mit ActiveRecord ............................... 239

8.1 Einführung ................................................................................ 2398.1.1 Vor- und Nachteile ................................................ 2418.1.2 Unterstützte Datenbanksysteme ......................... 242

8

Page 7: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 9 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: trennung , Aktueller Job: buch

Inhalt

8.1.3 Erstellen und Löschen von Datenbanken .......... 2438.1.4 Ein erstes Beispiel .................................................. 2448.1.5 Tabelle erstellen ..................................................... 245

8.2 Generatoren ............................................................................. 2498.2.1 Übersicht ................................................................. 2508.2.2 Model-Generator-Beispiel .................................... 251

8.3 Datenbankschema und Migrationen ................................... 2538.3.1 Migration-Skripte .................................................. 2558.3.2 Namenskonvention ............................................... 2588.3.3 Änderungen ausführen ......................................... 2598.3.4 Änderungen rückgängig machen ........................ 2598.3.5 Schnappschuss eines Datenbankschemas ......... 2608.3.6 Datentypen in Migrationen ................................. 2628.3.7 Tabellenfelder verwalten ...................................... 2628.3.8 Tabellen verwalten ................................................ 2648.3.9 Indizes verwalten ................................................... 2658.3.10 SQL-Befehle direkt verwenden ........................... 266

8.4 Getter- und Setter-Methoden .............................................. 2668.4.1 Überschreiben der Getter- und

Setter-Methoden ................................................... 2688.4.2 Eigene Methoden .................................................. 268

8.5 Erstellen, bearbeiten und löschen ....................................... 2698.5.1 Neues ActiveRecord-Objekt erstellen ................ 2698.5.2 Objekt erstellen und direkt speichern ............... 2698.5.3 Aktualisieren von Objekten ................................. 2718.5.4 Löschen von Objekten .......................................... 271

8.6 Validierung ............................................................................... 2728.6.1 »acceptance« .......................................................... 2748.6.2 »validates_associated« .......................................... 2748.6.3 »confirmation« ........................................................ 2758.6.4 »exclusion« .............................................................. 2758.6.5 »inclusion« .............................................................. 2768.6.6 »format« .................................................................. 2768.6.7 »length« ................................................................... 2768.6.8 »numericality« ........................................................ 2778.6.9 »presence« ............................................................... 2788.6.10 »uniqueness« .......................................................... 2788.6.11 »validates_each« .................................................... 2798.6.12 Validierungsoptionen ............................................ 2798.6.13 Selbstdefinierte Validierungen ............................ 280

9

Page 8: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 10 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: trennung , Aktueller Job: buch

Inhalt

8.7 Suchen ...................................................................................... 2808.7.1 Suche nach IDs ....................................................... 2818.7.2 Suchmethoden im Überblick ............................... 2828.7.3 Suchbedingung (»where«) .................................... 2868.7.4 Sortierreihenfolge (»order«) ................................. 2898.7.5 Limitieren der Suchergebnisse (»limit«,

»offset«) ................................................................... 2908.7.6 Statistische Berechnungen ................................... 2908.7.7 Suchen mit dynamischen »find«-Methoden ..... 2918.7.8 Suche über SQL ...................................................... 2938.7.9 Selbstdefinierte Suchmethoden (Scope) ............ 293

8.8 Assoziationen ........................................................................... 2968.8.1 Eins-zu-viele-Assoziationen (1:n) ....................... 2968.8.2 Eins-zu-eins-Assoziationen (1:1) ......................... 3048.8.3 Viele-zu-viele-Assoziationen (n:m) ..................... 3078.8.4 Polymorphe Assoziationen ................................... 3138.8.5 Mehrere Assoziationen zum gleichen Model ... 3178.8.6 Assoziationen mit Bedingungen ......................... 3188.8.7 Eine Assoziation, um eigene Methoden

erweitern ................................................................. 3218.8.8 SQL-Abfragen reduzieren mit »includes« .......... 3218.8.9 Komplexe Suchabfragen mit »joins« ................... 322

8.9 Callbacks ................................................................................... 3248.10 Vererbung ................................................................................. 326

9 Steuerzentrale mit ActionController .............................. 331

9.1 Grundlagen .............................................................................. 3319.2 Aufgaben des Controllers ...................................................... 333

9.2.1 Daten aus HTTP-Anfragen empfangen ............... 3339.2.2 Datenbankabfragen über Model-Klassen .......... 3359.2.3 Setzen und Abfragen von Cookies ...................... 3369.2.4 Setzen und Abfragen von Sessions ..................... 3379.2.5 Templates aufrufen ................................................ 3389.2.6 Setzen von Flash-Messages .................................. 3409.2.7 Weiterleitungen ..................................................... 3439.2.8 Senden von Dateien und Daten .......................... 3449.2.9 Authentifizierung ................................................... 345

9.3 Filter .......................................................................................... 3479.3.1 Filtertypen ............................................................... 3479.3.2 Filter nur auf bestimmte Actions anwenden .... 349

10

Page 9: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 11 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: trennung , Aktueller Job: buch

Inhalt

10 Routing mit ActionDispatch ............................................ 351

10.1 Routing-Grundlagen ............................................................... 35110.1.1 Elementare Routing-Einträge .............................. 35110.1.2 Bedingungen definieren mit »constraints« ........ 35410.1.3 Weiterleitungen ..................................................... 35410.1.4 Die »root«-Route ................................................... 354

10.2 Routing mit Ressourcen ......................................................... 35510.2.1 Der REST-Standard ................................................ 35510.2.2 Ressourcen mit Generatoren erstellen ............... 35710.2.3 Routing für Ressourcen ........................................ 35710.2.4 Verschachtelte Ressourcen .................................. 35910.2.5 Namespaces ............................................................ 36210.2.6 Singuläre Ressourcen ............................................ 36410.2.7 Ressourcen erweitern ............................................ 367

11 HTML5, Sass und CoffeeScript mit ActionView .......... 371

11.1 ERB-Templates ......................................................................... 37211.2 Erstellung von Templates ....................................................... 37411.3 Helper ....................................................................................... 375

11.3.1 Helper für Verlinkungen ....................................... 37611.3.2 Helper zur Zahlenformatierung ........................... 38311.3.3 Helper zur Textmanipulation ............................... 38811.3.4 Helper zur Entfernung von HTML-Code ............ 39111.3.5 Sonstige Helper ...................................................... 39211.3.6 Eigene Helper entwickeln .................................... 394

11.4 Layouts ...................................................................................... 39511.4.1 Mehrere »yield«-Bereiche .................................... 39611.4.2 Verschachtelte Layouts ......................................... 39811.4.3 Layouts im Controller festlegen .......................... 398

11.5 Formulare ................................................................................. 39911.5.1 Formulare mit Bezug zu einem Model ............... 39911.5.2 Validierung .............................................................. 42111.5.3 Formulare mit Bezug zu mehr als einem

Model ...................................................................... 42311.5.4 Formulare ohne Bezug zu einem Model ........... 425

11.6 Partials ...................................................................................... 42811.6.1 Übergabe von Variablen mit »locals« ................. 43111.6.2 Shared Partials ........................................................ 43211.6.3 Layout-Partials ........................................................ 433

11

Page 10: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 12 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: trennung , Aktueller Job: buch

Inhalt

11.7 Haml als alternatives Template-System ............................... 43311.8 Asset Pipeline .......................................................................... 434

11.8.1 Asset-Verzeichnisse ............................................... 43511.8.2 Bilder einbinden .................................................... 43611.8.3 Stylesheets und JavaScripts einbinden ............... 437

11.9 Stylesheets mit Sass ................................................................ 44011.9.1 Verschachtelung ..................................................... 44111.9.2 Variablen ................................................................. 44111.9.3 Vererbung ............................................................... 44211.9.4 Mixins ...................................................................... 443

11.10 JavaScript mit CoffeeScript .................................................... 444

12 E-Mails senden mit ActionMailer ................................... 447

12.1 Beispielprojekt: Kontaktformular ......................................... 44712.2 HTML-E-Mails ......................................................................... 45912.3 Layouts ...................................................................................... 46012.4 E-Mails mit Anhängen ........................................................... 46112.5 Konfiguration ........................................................................... 463

13 Nützliche Helfer mit ActiveSupport ............................... 465

13.1 Zahlen ....................................................................................... 46613.1.1 Vielfaches ................................................................ 46613.1.2 Ordinalzahlen ......................................................... 46613.1.3 Rundungen ............................................................. 46713.1.4 Kapazitätseinheiten ............................................... 46713.1.5 Datum und Zeit ...................................................... 468

13.2 Zeichenketten .......................................................................... 47213.3 Arrays ........................................................................................ 47413.4 Hashes ....................................................................................... 47613.5 Datentypunabhängig .............................................................. 478

14 Webservices mit ActiveResource .................................... 481

14.1 Was sind Webservices? .......................................................... 48114.2 Einen Webservice anbieten ................................................... 48214.3 Zugriff auf Webservices mit ActiveResource ...................... 485

12

Page 11: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 13 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: trennung , Aktueller Job: buch

Inhalt

15 Mehrsprachige Applikationen mit I18n ........................ 487

15.1 Konfiguration ........................................................................... 48715.2 Sprachauswahl ......................................................................... 48815.3 Übersetzungsdateien .............................................................. 488

15.3.1 Fertige Übersetzungsdateien importieren ......... 49015.4 Übersetzen und lokalisieren .................................................. 491

15.4.1 Texte ......................................................................... 49115.4.2 Texte mit Platzhaltern ........................................... 49315.4.3 Texte mit Pluralisierung ........................................ 49315.4.4 Datums- und Zeitformatierung ........................... 49415.4.5 Dezimalzahlen ........................................................ 49515.4.6 Währungen ............................................................. 49615.4.7 Übersetzung von Formularen .............................. 49715.4.8 Weitere Helper ....................................................... 49815.4.9 Ganzseitige Übersetzungen .................................. 499

16 Unobtrusive JavaScript und Ajax mit jQuery ............... 501

16.1 JavaScript-Frameworks ........................................................... 50116.1.1 jQuery ...................................................................... 50116.1.2 jQuery UI ................................................................. 50116.1.3 Einbinden der JavaScript-Bibliotheken .............. 502

16.2 Unobtrusive JavaScript ........................................................... 50216.2.1 Grundlagen ............................................................. 50316.2.2 Unobtrusive JavaScript in Rails ........................... 504

16.3 Ajax ............................................................................................ 50516.3.1 Grundlagen ............................................................. 50616.3.2 Ajax in Rails ............................................................ 507

16.4 Beispiele ................................................................................... 50916.4.1 Bookmark per Ajax löschen ................................. 50916.4.2 Ein Bookmark per Ajax hinzufügen .................... 512

17 Sicherheit, Deployment und Optimierung durchCaching .................................................................................. 517

17.1 Sicherheit .................................................................................. 51717.1.1 SQL Injection .......................................................... 51717.1.2 Mass Assignment ................................................... 51817.1.3 Cross-Site-Scripting (XSS) ..................................... 52117.1.4 Cross-Site Request Forgery (CSRF/XSRF) ........... 522

13

Page 12: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 14 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: trennung , Aktueller Job: buch

Inhalt

17.1.5 Session Hijacking und Fixation ............................ 52317.2 Deployment ............................................................................. 525

17.2.1 Cloud Computing .................................................. 52517.2.2 Heroku ..................................................................... 526

17.3 Optimierung durch Caching .................................................. 52917.3.1 Page-Caching .......................................................... 53017.3.2 Action-Caching ....................................................... 54017.3.3 Fragment-Caching .................................................. 54317.3.4 Caching mit der Asset Pipeline ........................... 548

Anhang .......................................................................................... 551

A Die wichtigsten Ruby-Klassen ......................................................... 553A.1 Zahlen ....................................................................................... 553A.2 Zeichenketten .......................................................................... 556

A.2.1 »here-document« ................................................... 558A.2.2 Ausdrücke in Zeichenketten ................................ 559A.2.3 Die Methode »length« .......................................... 560A.2.4 Die Methode »split« .............................................. 560A.2.5 Zeichenketten formatieren ................................... 561A.2.6 Groß- und Kleinschrift .......................................... 562A.2.7 Teil-Stings ................................................................ 563A.2.8 In Zeichenketten suchen ...................................... 565A.2.9 Etwas einer Zeichenkette hinzufügen ................ 566A.2.10 Angehängte Zeichen löschen ............................... 567A.2.11 Leerräume löschen ................................................ 568A.2.12 Zeichenketten wiederholen ................................. 568A.2.13 Strings in Zahlen konvertieren ............................ 568A.2.14 Zeichenketten verschlüsseln ................................ 570A.2.15 Zeichen in einer Zeichenkette zählen ................ 570A.2.16 Eine Zeichenkette umkehren ............................... 571A.2.17 Doppelte Zeichen entfernen ................................ 571A.2.18 Bestimmte Zeichen entfernen ............................. 572

A.3 Symbole .................................................................................... 572A.4 Reguläre Ausdrücke ................................................................ 573

A.4.1 Syntax von regulären Ausdrücken ...................... 573A.4.2 Anwendungsbeispiele aus der Praxis ................. 576

A.5 Arrays ........................................................................................ 579A.5.1 Ein Array erzeugen ................................................ 579A.5.2 Auf Array-Elemente zugreifen ............................. 580A.5.3 Auf die Länge eines Arrays zugreifen ................. 582

14

Page 13: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 15 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: trennung , Aktueller Job: buch

Inhalt

A.5.4 Arrays vergleichen ................................................. 583A.5.5 Ein Array sortieren ................................................. 583A.5.6 Zufall ........................................................................ 585A.5.7 Nach Elementen in einem Array suchen ........... 586A.5.8 Differenz zwischen zwei Arrays bestimmen ...... 588A.5.9 »nil«-Werte aus einem Array entfernen ............. 588A.5.10 Bestimmte Array-Elemente entfernen ............... 588A.5.11 Ein Array umkehren ............................................... 590A.5.12 Doppelte Einträge aus einem Array löschen ..... 590A.5.13 Iteratoren ................................................................ 590

A.6 Hashes ....................................................................................... 592A.6.1 Einen Hash erzeugen ............................................. 593A.6.2 Schlüssel-Wert-Paare löschen .............................. 595A.6.3 Über einen Hash iterieren .................................... 596A.6.4 Schlüssel und Wert in einem Hash

vertauschen ............................................................. 596A.6.5 Schlüssel und Werte in einem Hash finden ...... 597A.6.6 Einen Hash in ein Array extrahieren ................... 598A.6.7 Nach Schlüssel-Wert-Paaren suchen .................. 598A.6.8 Einen Hash sortieren ............................................. 599A.6.9 Zwei Hashes miteinander mischen ..................... 599A.6.10 Einen Hash aus einem Array erzeugen ............... 600

Index ............................................................................................................. 601

15

Page 14: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 447 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: kap_actionmailer.tex , Aktueller Job: buch

Jede Webapplikation muss E-Mails versenden können – sei es eineNachricht aus einem Kontaktformular heraus oder die Bestäti-gungs-E-Mail zu einem Buchungsvorgang.

12 E-Mails senden mit ActionMailer

ActionMailer ist ein Bestandteil des Rails-Frameworks und bietet einige Features

Features:

� Versenden von E-MailsNachrichten können als Text- oder als HTML-E-Mail verschickt wer-den. Beides gleichzeitig geht auch; dann kann der Mailclient entschei-den, welches Format er anzeigt.

� Versenden von DateianhängenIst mit ActionMailer sogar relativ einfach zu realisieren.

12.1 Beispielprojekt: Kontaktformular

Die Funktionsweise von ActionMailer zum Versenden von E-Mails wollen Beispiel

wir anhand eines Kontaktformulars zeigen. Der Kunde soll seine Datenund seine Nachricht in das Formular eingeben können, beim Absendendes Formulars soll die Nachricht an den Webseitenbetreiber geschicktwerden, und der Kunde soll eine Bestätigungs-E-Mail erhalten. Es sollenalso zwei E-Mails mit unterschiedlichen Inhalten versendet werden.

Unsere Applikation soll contact_demo heißen. Die Formulardaten sollenin einer Datenbank zur Archivierung gespeichert werden. Über einenpasswortgeschützten Bereich kann auf die Liste und Details der gespei-cherten Daten zugegriffen werden.

Formular ohne Datenbank

Mit ActiveModel ist es auch möglich, Models anzulegen, die nicht auf einerDatenbank basieren. Das heißt, die Formulardaten werden dann nicht in einerDatenbank gespeichert. Sich für ein datenbankbasiertes Model zu entscheiden,hat zwei Vorteile: Man kann den Scaffold-Generator einsetzen, und man hat ein

447

Page 15: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 448 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: kap_actionmailer.tex , Aktueller Job: buch

12 E-Mails senden mit ActionMailer

Archiv, das man statistisch auswerten kann und auf das man zurückgreifen kann,falls z. B. die E-Mail mit den Formulardaten nicht zugestellt werden konnte.

Als Datenbanksystem werden wir in diesem Fall SQLite3 verwenden, daes den Vorteil bietet, dass wir keine Datenbank manuell anlegen müssen,weil SQLite3 dateibasiert ist und die Dateien automatisch angelegt wer-den. Sie können natürlich auch ein anderes Datenbanksystem wie MySQLoder PostgreSQL verwenden, müssen dann aber die entsprechende Da-tenbank selbst erstellen. Mehr zum Thema Datenbanken erfahren Sie inKapitel 8 ab Seite 239.

Wir generieren zunächst unser Beispielprojekt und wechseln in das neueProjekt generieren

Verzeichnis:

rails new contact_demo -JT

cd contact_demo

Die Optionen -JT setzen wir, damit keine JavaScript-Bibliothek gewähltwird, weil wir kein JavaScript in unserem Projekt benötigen (stan-dardmäßig wäre das sonst jQuery). Außerdem verhindern wir so, dassTest::Unit-Dateien angelegt werden; wir wollen unsere Applikationnicht testen.

Wir benötigen einen Controller, Views und ein Model, um unser Kon-taktformular nutzen zu können. Da wir eine Nachricht, die über ein Kon-taktformular gesendet werden kann, als eine Ressource betrachten, dieüber die vier CRUD-Methoden (Create, Read, Update, Delete) angelegt,angezeigt, editiert und gelöscht werden kann, werden wir den Scaffold-Generator nutzen, der genau für diesen Anwendungsfall einigen Codeautomatisch generiert und uns damit die Arbeit erleichtert.

Unser Model soll contact_message heißen, und der Einfachheit halberBenötigte Felder

wollen wir nur die Felder name für den Namen, email für die E-Mail-Adresse und message für die Nachricht nutzen. Die Felder name undemail sind vom Typ string, und das Feld message ist vom Typ text, daes möglich sein soll, mehr als 256 Zeichen in einer Nachricht zu spei-chern. Wir führen also aus dem Projektverzeichnis contact_demo herausfolgenden Befehl aus:

rails generate scaffold contact_message name:string \email:string message:text

Der Generator hat automatisch die Model-Datei, die Controller-Datei, dieViews und die Migration-Datei erstellt.

448

Page 16: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 449 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: kap_actionmailer.tex , Aktueller Job: buch

Beispielprojekt: Kontaktformular 12.1

Sollten wir doch noch weitere Felder benötigen, könnten wir die Migra- Migration

tion-Datei öffnen und weitere Felder hinzufügen; ansonsten führen wirjetzt die Migration mit dem Befehl rake db:migrate aus.

Wir können unsere Applikation nun im Browser testen. Dazu starten wir Test im Browser

auf der Konsole den lokalen Rails-Server mit dem Befehl

rails server

und rufen über http://localhost:3000/contact_messages unsere Applikationim Browser auf:

Abbildung 12.1 E-Mail-Applikation

Über den Link »New Contact message« gelangen wir zum Formular: Neue Nachrichtanlegen

Abbildung 12.2 Neue Nachricht verfassen

449

Page 17: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 450 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: kap_actionmailer.tex , Aktueller Job: buch

12 E-Mails senden mit ActionMailer

Wenn wir das Formular absenden, wird die neue Nachricht angezeigt:Nachricht anzeigen

Abbildung 12.3 So sieht die Nachricht aus.

Über den »Zurück«-Link gelangen wir zur Übersicht aller Nachrichten:Alle Nachrichten

Abbildung 12.4 Liste aller Nachrichten

Die Besucher unserer Projektwebsite sollen nur eine neue Nachricht er-stellen können. Nach dem Absenden des Formulars soll ihnen eine Bestä-tigung angezeigt werden, dass das Formular erfolgreich versendet wurde.Alle anderen Seiten, wie die Liste aller Messages oder das Editieren ei-ner Nachricht, sollen durch ein Passwort geschützt werden, also nichtöffentlich zugänglich sein.

Um dem Benutzer zu signalisieren, dass das Formular erfolgreich gesendetBestätigung

werden konnte, muss keine eigene Bestätigungsseite angelegt werden,sondern es reicht aus, wenn wir ihn nach dem Absenden des Formularsauf die Startseite der Applikation weiterleiten und eine Flash-Message»Thank you for your message« ausgeben. Das bedeutet, die Methodecreate in unserem Controller hat folgenden Inhalt:

class ContactMessagesController < ApplicationController...def create@contact_message = ContactMessage.new(

params[:contact_message])

450

Page 18: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 451 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: kap_actionmailer.tex , Aktueller Job: buch

Beispielprojekt: Kontaktformular 12.1

if @contact_message.saveredirect_to root_url,

notice: 'Thank you for your message'else

render action: "new"end

end...

Listing 12.1 »app/controllers/contact_messages_controller.rb«

Der Einfachheit halber haben wir auch den Code zur Ausgabe im JSON-Format, der vom Scaffold-Generator erzeugt wurde, aus der Action crea-

te entfernt.

Damit die Weiterleitung funktioniert, brauchen wir auf jeden Fall eine HomepageerstellenStartseite für unsere Applikation. Und das machen wir wie folgt: Mit dem

Befehl rails generate controller pages home erstellen wir einen Pa-ges-Controller mit dem zugehörigen View home und dann im View dieAusgabe der Flash-Message. Außerdem implementieren wir, da es sichum die Startseite unserer Website handelt, einen Link zum Kontaktfor-mular:

<h1>Home</h1><p id="notice"><%= notice %></p>

<p>Demo Seite</p>

<p><%= link_to 'Contact', new_contact_message_path %></p>

Listing 12.2 »app/views/pages/home.html.erb«

Nachdem das Formular erfolgreich abgesendet werden konnte, leiten wir »root_url«

im ContactMessages-Controller mit der Methode root_url zur Startseiteweiter. Damit das funktioniert, müssen wir noch das Routing anpassenund die Datei index.html im Verzeichnis public löschen:

ContactDemo::Application.routes.draw doroot :to => 'pages#home'...

end

Listing 12.3 »config/routes.rb«

Außerdem kann in der Routing-Eintrag get "pages/home", der vom Con-troller-Generator angelegt wurde, entfernt werden.

451

Page 19: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 452 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: kap_actionmailer.tex , Aktueller Job: buch

12 E-Mails senden mit ActionMailer

Im Browser gelangen wir jetzt beim Aufruf von http://localhost:3000 aufdie Startseite unserer Applikation, von wo aus das Kontaktformular ver-linkt ist. Wenn wir das Formular absenden, werden wir zurück zur Start-seite geleitet, und es wird die Nachricht »Thank you for your message«angezeigt.

Die Sache hat nur noch einen Haken: Das Formular kann auch leer ab-Validierung

gesendet werden. Das heißt, wir müssen noch Validierungen im Contact-Message-Model hinzufügen. Es sollen alle Felder ausgefüllt werden, dasFeld »Name« soll mindestens zwei Zeichen enthalten, und das Format derE-Mail-Adresse soll geprüft werden:

class ContactMessage < ActiveRecord::Basevalidates :name, length: {:minimum => 2}

validates :email,format: /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i

validates :message, presence: trueend

Listing 12.4 »app/models/contact_message.rb«

Alle anderen Seiten unserer Applikation zum Verwalten der Nachrich-Authentifizierung

ten, sollen durch ein Passwort geschützt werden. Dazu nutzen wir dieMethode http_basic_authenticate_with, die uns Rails zur Verfügungstellt und mit der wir ziemlich einfach eine HTTP-Authentifizierung im-plementieren können.

Die Methode fügen wir am Anfang unseres ContactMessages-Controllersein und übergeben ihr den Benutzernamen und das Passwort. Außerdemgeben wir an, dass die Authentifizierung für alle Actions des Control-lers gilt, außer für die Actions new und create, weil das Aufrufen undAbsenden des Kontaktformulars für jeden Benutzer möglich sein soll:

class ContactMessagesController < ApplicationControllerhttp_basic_authenticate_with :name => "admin",

:password => "geheim",:except => [:new, :create]

...end

Überprüfen Sie die Authentifizierung, indem Sie im Browser überhttp://localhost:3000/contact_messages die Liste aller Kontaktmessagesaufrufen.

452

Page 20: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 453 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: kap_actionmailer.tex , Aktueller Job: buch

Beispielprojekt: Kontaktformular 12.1

Nun können wir eine neue Kontaktnachricht über das Formular anlegen, »mailer«

und es ist gewährleistet, dass kein unbefugter User die Daten einsehenund verwalten kann, aber es wird noch keine E-Mail verschickt. UmE-Mails versenden zu können, setzen wir den Mailer-Generator ein, deruns eine Klasse generiert, die für das Versenden der E-Mails zuständig ist,und Template-Dateien, in denen wir die Texte für die E-Mails hinterlegenkönnen.

Der Mailer-Generator erwartet einen Namen sowie eine Liste von GeneratoreinsetzenE-Mail-Templates die versendet werden sollen, als Parameter:

rails generate mailer MailerName template1 template2

Wir möchten in unserem Beispiel zwei verschiedene E-Mails senden. EineBestägigungs-E-Mail (confirmation) an den Absender des Kontaktformu-lars und eine E-Mail mit der Anfrage (inquiry) an den Betreiber der Web-site. Unser mailer soll contact_mailer heißen und die E-Mail-Templatesfür die beiden zu versendenden E-Mails confirmation und inquiry:

rails generate mailer contact_mailer confirmation inquiry

Es werden folgende Dateien erzeugt:

create app/mailers/contact_mailer.rbinvoke erbcreate app/views/contact_mailercreate app/views/contact_mailer/confirmation.text.erbcreate app/views/contact_mailer/inquiry.text.erb

Die Mailer-Datei contact_mailer.rb liegt im Verzeichnis app/mailers Erzeugte Dateien

und die beiden Templates confirmation.text.erb und inqui-

ry.text.erb landen im Verzeichnis app/views/contact_mailer.Das Template confirmation.text.erb werden wir nutzen, um ei-ne Bestätigungs-E-mail an den Kunden zu senden, und das Templateinquiry.text.erb, um eine Zusammenfassung der Daten an denWebsitebetreiber zu schicken.

Zunächst möchten wir die Bestätigungs-E-Mail für den Kunden anpassen. Bestätigungs-E-MailWir wählen einen ganz einfachen Standardtext und geben diesen in die

Datei confirmation.text.erb ein:

Vielen Dank für Ihre Nachricht.

Wir werden uns so schnell wie möglich bei Ihnen melden.

Listing 12.5 »app/views/contact_mailer/confirmation.text.erb«

453

Page 21: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 454 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: kap_actionmailer.tex , Aktueller Job: buch

12 E-Mails senden mit ActionMailer

Die Klasse ContactMailer erbt von der Klasse ActionMailer::Base undenthält die beiden Methoden confirmation und inquiry:

class ContactMailer < ActionMailer::Basedefault from: "[email protected]"

# Subject can be set in your I18n file at# config/locales/en.yml with the following lookup:## en.contact_mailer.confirmation.subject#def confirmation@greeting = "Hi"

mail to: "[email protected]"end

# Subject can be set in your I18n file at# config/locales/en.yml with the following lookup:## en.contact_mailer.inquiry.subject#def inquiry@greeting = "Hi"

mail to: "[email protected]"end

end

Listing 12.6 app/mailers/contact_mailer.rb

Die Mailer-Klasse enthält immer so viele Methoden, wie es E-Mail-Tem-plates gibt, die auch so heißen, wie die Methoden.

In der Methode confirmation wird standardmäßig eine InstanzvariableInstanzvariable

@greeting für das E-Mail Template definiert. Wie bei jedem View kön-nen auch bei Views für E-Mails beliebig viele Instanzvariablen definiertwerden, die im zugehörigen Template verwendet werden können. Dawir einen Standardtext für die Bestätigungs-E-Mail an die Kunden imTemplate confirmation.text.erb definiert haben und auch immer nurdiesen Standardtext versenden möchten, benötigen wir keine Variableninnerhalb unseres Templates.

Die E-Mail wird mit dem Befehl mail versendet. Der Empfänger der E-Empfänger undAbsender Mail wird über die Option to: gesetzt. Da wir die Bestätigungsmail an den

Benutzer, der das Formular ausgefüllt hat, versenden wollen, müssen wir

454

Page 22: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 455 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: kap_actionmailer.tex , Aktueller Job: buch

Beispielprojekt: Kontaktformular 12.1

die E-Mail-Adresse des Benutzers aus dem Formular an die Methode con-

firmation übergeben. Dazu definieren wir einen Parameter email. DerAbsender der E-Mail wird über die Option from: angegeben. Die Optionkann als default am Anfang der Mailer-Klasse gesetzt werden, was Sinnergibt, wenn alle E-Mails, die von der Klasse versendet werden, den glei-chen Absender haben, oder sie kann explizit in der mail-Methode gesetztwerden. Wir entscheiden uns für das Setzen des Absenders innerhalb derMethode mail, weil unsere beiden E-Mails von unterschiedlichen Absen-dern abgeschickt werden sollen.

Der Betreff der E-Mail kann über die Option subject: festgelegt werden. Betreff

Alternativ kann in mehrsprachigen Anwendungen der Betreff auch ineiner Sprachdatei angelegt werden (siehe Kapitel 15 ab Seite 487). ZumBeispiel kann für Englisch innerhalb der Datei config/locales/en.ymlunter dem Schlüssel contact_mailer.confirmation.subject die Über-setzung für den Betreff der Bestätigungs-E-Mail festgelegt werden.

Unsere Methode confirmation innerhalb der Klasse ContactMailer siehtdann wie folgt aus:

class ContactMailer < ActionMailer::Base

def confirmation(email)mail to: email,

from: "[email protected]",subject: "Ihre Kontaktnachricht erhalten"

end...

end

Listing 12.7 »app/mailers/contact_mailer.rb«

Wir möchten unsere Bestätigungs-E-Mail dann versenden, wenn ein Kun- Zeitpunkt zumVersenden derE-Mail

de das Kontaktformular ausgefüllt und abgeschickt hat und die Nachrichtin der Datenbank gespeichert werden konnte. Das entspricht im Con-

tactMessagesController in der Action create der Stelle, an der abge-fragt wird, ob das Speichern erfolgreich war. Der Versand der E-Mailerfolgt über den Befehl ContactMailer.confirmation().deliver. Ohneden Aufruf der Methode deliver erfolgt kein E-Mail-Versand. Der Me-thode confirmation übergeben wir die E-Mail-Adresse, die der Kundeins Formular eingegeben hat und die uns in @contact_message.email

zur Verfügung steht:

455

Page 23: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 456 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: kap_actionmailer.tex , Aktueller Job: buch

12 E-Mails senden mit ActionMailer

def create@contact_message = ContactMessage.new(

params[:contact_message])if @contact_message.saveContactMailer.confirmation(@contact_message.email).deliverredirect_to root_url, notice: 'Thank you for your message'

elserender action: "new"

endend

Listing 12.8 »app/controllers/contact_messages_controller.rb«

Wenn wir jetzt den lokalen Rails-Server erneut starten und unser Kontakt-formular (http://localhost:3000/contact_messages/new) ausfüllen und ab-senden, können wir nicht sehen, ob die E-Mail versendet wurde, dain der Entwicklungsumgebung normalerweise keine E-Mails verschicktwerden.

Abbildung 12.5 Test des Formulars

Aber in dem Konsolenfenster, in dem wir den lokalen Rails-Server mitKontrolle mit Hilfeder Konsole rails server gestartet haben, wird alles protokolliert. Zum einen finden

wir hier den SQL-INSERT-Befehl, der die Nachricht in der Datenbankgespeichert hat, und wir finden hier einen Eintrag Sent mail, innerhalbdem protokolliert wurde, an wen welche E-Mail mit welchem Betreff undText versendet wurde:

456

Page 24: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 457 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: kap_actionmailer.tex , Aktueller Job: buch

Beispielprojekt: Kontaktformular 12.1

SQL (0.5ms) INSERT INTO "contact_messages" ("created_at", ...Rendered contact_mailer/confirmation.text.erb (0.4ms)

Sent mail to [email protected] (46ms)Date: Sun, 02 Oct 2011 19:26:06 +0200From: [email protected]: [email protected]: <4c9442c6d444b_...Subject: Ihre Kontaktnachricht erhaltenMime-Version: 1.0Content-Type: text/plain;charset=UTF-8Content-Transfer-Encoding: quoted-printable

Vielen Dank f=C3=BCr Ihre Nachricht.

Wir werden uns so schnell wie m=C3=B6glich bei Ihnen melden.

Sollten die Umlaute innerhalb des Konsolenfensters nicht richtig darge-stellt werden, muss Sie das nicht beunruhigen. Das passiert nur auf derKonsole. Innerhalb der versendeten E-Mail werden alle Zeichen korrektangezeigt.

Es soll auch eine E-Mail mit der Zusammenfassung aller Daten aus dem »inquiry«

Kontaktformular an den Webseitenbetreiber gesendet werden. Für dasVersenden dieser E-Mail haben wir im Model ContactMailer die Me-thode inquiry und das entsprechende Template inquiry.text.erb imVerzeichnis app/views angelegt.

Da wir im Gegensatz zu der Bestätigungs-E-Mail an den Kunden diesmal Objekt übergeben

alle Werte in der E-Mail ausgeben möchten, muss aus dem Contact-

MessagesController an die Methode inquiry das ganze Objekt @con-

tact_message und nicht mehr nur einzelne Werte übergeben werden:

def create@contact_message = ContactMessage.new(

params[:contact_message])if @contact_message.saveContactMailer.confirmation(@contact_message.email).deliverContactMailer.inquiry(@contact_message).deliverredirect_to root_url, notice: 'Thank you for your message'

elserender action: "new"

endend

Listing 12.9 »app/controllers/contact_messages_controller.rb«

457

Page 25: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 458 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: kap_actionmailer.tex , Aktueller Job: buch

12 E-Mails senden mit ActionMailer

Die Methode inquiry empfängt das übergebene Objekt in dem Parametercontact_message und setzt für das zugehörige Template die Instanzvaria-ble @contact_message und die Absenderadresse der E-Mail:

...def inquiry(contact_message)

@contact_message = contact_message

mail to: "[email protected]",from: contact_message.email,subject: "Neue Kontaktanfrage"

end

Listing 12.10 »app/mailers/contact_mailer.rb«

Damit die Formulardaten auch in der E-Mail ausgegeben werden, müssenE-Mail-Text

wir noch den E-Mail-Text im Template inquiry.text.erb gestalten:

Name: <%= @contact_message.name %>

E-Mail: <%= @contact_message.email %>

Nachricht: <%= @contact_message.message %>

Listing 12.11 »app/views/contact_mailer/inquiry.text.erb«

Wenn wir jetzt einen erneuten Test durchführen, sehen wir im Konsolen-fenster zwei Sent-mail-Einträge, einen für unsere Bestätigungs-E-Mail anden Kunden und einen für die Zusammenfassung an den Websitebetrei-ber:

SQL (0.5ms) INSERT INTO "contact_messages" ("created_at", ...Rendered contact_mailer/confirmation.text.erb (0.4ms)

Sent mail to [email protected] (8ms)Date: Sun, 02 Oct 2011 19:34:37 +0200From: [email protected]: [email protected]: <4c95849c66fca_...>Subject: Ihre Kontaktnachricht erhaltenMime-Version: 1.0Content-Type: text/plain;charset=UTF-8Content-Transfer-Encoding: quoted-printable

Vielen Dank f=C3=BCr Ihre Nachricht.

458

Page 26: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 459 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: kap_actionmailer.tex , Aktueller Job: buch

HTML-E-Mails 12.2

Wir werden uns so schnell wie m=C3=B6glich bei Ihnen melden.Rendered contact_mailer/inquiry.text.erb (1.1ms)

Sent mail to [email protected] (8ms)Date: Sun, 02 Oct 2011 19:34:37 +0200From: [email protected]: [email protected]: <4c95849c73cb5_...>Subject: Neue KontaktanfrageMime-Version: 1.0Content-Type: text/plain;charset=UTF-8Content-Transfer-Encoding: 7bit

Name: Hussein Morsy

E-Mail: [email protected]

Nachricht: Meine erste NachrichtRedirected to http://localhost:3000/

In Rails kann man also relativ einfach E-Mails verschicken. Durch Ein-satz des Mailer-Generators, dem der Name des Models und die einzelnenViews übergeben werden müssen, wird uns sehr viel Arbeit abgenom-men. Der Generator erzeugt das Mailer-Model mit den erforderlichenMethoden und die View-Dateien, die wir nur noch konfigurieren und anunsere Bedürfnisse anpassen müssen.

12.2 HTML-E-Mails

Mit HTML-E-Mails ist es möglich, E-Mails durch Bilder und formatiertenText auszuschmücken. Da es E-Mail-Clients gibt, die HTML-Mails nichtakzeptieren, sollte immer auch eine reine Textversion vorliegen.

Das Erstellen von HTML-E-Mails ist in Rails 3 ganz einfach. Dazuwird neben dem Template für die Textversion (*.text.erb) einfachdas HTML-Template (*.html.erb) angelegt. Da wir nur für die Bestä-tigungs-E-Mail, die an den Benutzer versendet wird, zusätzlich eineHTML-Version versenden möchten, brauchen wir in unserem Beispielneben der Template-Datei für die Textversion confirmation.text.erb,einfach nur die HTML-Version confirmation.html.erb zu erstellen:

459

Page 27: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 460 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: kap_actionmailer.tex , Aktueller Job: buch

12 E-Mails senden mit ActionMailer

<!DOCTYPE html><html>

<body><h1>Anfrage erhalten</h1>Vielen Dank für Ihre Nachricht.

Wir werden uns so schnell wie möglich bei Ihnen melden.</body>

</html>

Listing 12.12 »app/views/contact_mailer/confirmation.html.erb«

ActionMailer sendet dann sowohl die Text- als auch die HTML-Versi-on (Content-Type: multipart/alternative) an den E-Mail-Client, der dannselbst entscheiden kann, welche Version er dem Benutzer anzeigt. Da-her ist es sinnvoll, mindestens die Textversion der E-Mail und optionalzusätzlich eine HTML-Version zu erstellen.

12.3 Layouts

Wenn mehrere E-Mail-Templates den gleichen Aufbau haben, ist es sinn-voll, Layouts zu verwenden. Der Einsatz von Layouts funktioniert hiergenauso wie bei Layouts in Controllern (siehe Abschnitt 9.2.5 auf Sei-te 339). Layouts können am Anfang der Mailer-Klasse mit der Methodelayout definiert werden. Im folgenden Beispiel wird das Layout contactverwendet:

class ContactMailer < ActionMailer::Baselayout 'contact'...

end

Listing 12.13 »app/mailers/contact_mailer.rb«

Mail-Layouts werden wie die Controller-Templates im Verzeichnisapp/views/layouts abgelegt. Je nachdem, ob eine Text-E-Mail oder eineHTML-E-Mail verschickt wird, wird vom ActionMailer entweder das Text-Layout (app/views/layouts/contact.text.erb) oder das HTML-Layout(app/views/layouts/contact.html.erb) verwendet. Falls z. B. nur einHTML-Layout angelegt wird, so wird für die Text-E-Mails kein Templateverwendet.

460

Page 28: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 461 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: kap_actionmailer.tex , Aktueller Job: buch

E-Mails mit Anhängen 12.4

<!DOCTYPE html><html><body><%= yield %>

</body></html>

Listing 12.14 »app/views/layouts/contact.html.erb«

Der Inhalt des Templates wird in der Layout-Datei an der Stelle, an derer angezeigt werden soll, durch Aufruf der Methode yield geladen. Dasheißt, das Template enthält nicht mehr das HTML-Grundgerüst, sondernnur noch den reinen Inhalt:

<h1>Anfrage erhalten</h1>Vielen Dank für Ihre Nachricht.

Wir werden uns so schnell wie möglich bei Ihnen melden.

Listing 12.15 »app/views/contact_mailer/confirmation.html.erb«

Alternativ kann in der Mailer-Klasse statt der Methode layout am An-fang der Klasse auch für jede E-Mail getrennt das Layout mit render

layout: 'contact' festgelegt werden. Innerhalb des Format-Blocks dermail-Methode kann auch zwischen der HTML- und der Textversion un-terschieden werden. Die Textversion verwendet im folgenden Beispielkein Layout:

class ContactMailer < ActionMailer::Basedef confirmation(email)mail(to: email, from: "[email protected]", subject:

"Ihre Kontaktnachricht erhalten") do |format|format.html { render layout: 'contact' }format.text

endend...

end

Listing 12.16 »app/mailers/contact_mailer.rb«

12.4 E-Mails mit Anhängen

Um eine E-Mail mit einem Anhang zu versenden, kann einfach das Array »attachments«

attachments verwendet werden, in dem sowohl der Dateiname als auch

461

Page 29: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 462 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: kap_actionmailer.tex , Aktueller Job: buch

12 E-Mails senden mit ActionMailer

der Inhalt der Datei angegeben wird. (Genau genommen handelt es sichnicht um ein Array, sondern um eine Methode mit dem Methodennamenattachments[]). Wenn Sie zum Beispiel an die Bestätigungs-E-Mail, diedie Kunden erhalten, das Ruby-on-Rails-Logo anhängen möchten, gehenSie wie folgt vor:

class ContactMailer < ActionMailer::Basedef confirmation(email)attachments['rails.png'] = File.read("#{Rails.root}/app/assets/images/rails.png")

mail(to: email, from: "[email protected]",subject: "Ihre Kontaktnachricht erhalten") do |format|format.html { render :layout => 'contact' }format.text

endend

def inquiry(contact_message)@contact_message = contact_message

mail to: "[email protected]",from: contact_message.email,subject: "Neue Kontaktanfrage"

endend

Listing 12.17 app/mailers/contact_message.rb

Auf diese Weise wird das Rails-Logo als Anhang mit der E-Mail versendet.Inline-Attachment

Das Bild erscheint jedoch nicht im Text der E-Mail selbst. Damit dasBild im Inhalt der E-Mail erscheint, kann im Template einfach das Arrayattachments mit Aufruf der Methode url verwendet werden. Dies wirdals Inline-Attachment bezeichnet. In unserem Beispiel setzen wir in derHTML-Version einfach das Bild des Rails-Logos mit dem image_tag ein:

<h1>Anfrage erhalten</h1>Vielen Dank für Ihre Nachricht.

Wir werden uns so schnell wie möglich bei Ihnen melden.

<%= image_tag attachments['rails.png'].url %>

Listing 12.18 »app/views/contact_mailer/confirmation.html.erb«

462

Page 30: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 463 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: kap_actionmailer.tex , Aktueller Job: buch

Konfiguration 12.5

12.5 Konfiguration

Standardmäßig ist ActionMailer so konfiguriert, dass es E-Mails über SMTP-Konfi-gurationsendmail versendet. Auf Unix-Servern ist in der Regel sendmail oder

ein kompatibler Mail Transfer Agent wie Postfix oder Exim installiert.Sie können aber auch einstellen, dass SMTP genutzt werden soll. Um dieSMTP-Einstellungen vorzunehmen, fügen Sie die folgenden Einträge indie neue Datei config/initializers/mail.rb ein:

ActionMailer::Base.smtp_settings = {address: "smtp.adresse-des-smtp-host.com",port: 587,domain: 'www.ihre-domain.com',user_name: '<username>',password: '<password>',authentication: :plain,enable_starttls_auto: true

}

Listing 12.19 »config/initializers/mail.rb«

Ersetzen Sie die Werte innerhalb des Hashs durch Ihre Einstellungen, die Einstellungen

Sie bei Ihrem Provider erfragen können.

� address und portGeben die Adresse und den Port zu Ihrem SMTP–Server an.

� domainDie Domain, die benutzt werden soll, um den Mailer beim Server zuidentifizieren. Normalerweise wird der Top-Level-Domain-Name derMaschine angegeben, welche die E-Mail versendet.

� user_name und passwordWird für die Authentifizierung am SMTP–Server benötigt, wenn au-

thentication gesetzt ist.

� authenticationDie Authentifizierungsmethode, die Ihr SMTP–Server erwartet. Ent-weder nil, :plain, :login oder :cram_md5. Ihr Administrator kannIhnen bei der Auswahl der richtigen Option weiterhelfen.

463

Page 31: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 601 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: buch.ind , Aktueller Job: buch

Index

A

Absende-Button 407acceptance 274Action-Caching 540ActionController

after_filter 348around_filter 349Aufgaben des Controllers 333Authentifizierung 345before_filter 347Cookies 336Filter 347Flash-Messages 340Grundlagen 331params[] 333render 338request 334respond_to 340Ressourcen 355send_data 345send_file 344Sessions 337Weiterleitungen 343

ActionMailer 447ActionView

Alternative Template-Systeme 433Formulare mit Bezug zu einem

Model 399Formulare mit Bezug zu mehr als

einem Model 423Formulare ohne Bezug zu einem

Model 425Helper 375Layouts 395Partials 428Templates 371

ActiveRecord 111, 239:order 289:where 286acceptance 274Assoziationen 296Assoziationen mit Bedingungen 318Assoziationen um eigene Methoden

erweitern 321Callbacks 324

change 29, 256confirmation 275create 269delete 272destroy 271down 256Einführung 239Eins-zu-eins-Assoziation 304Eins-zu-viele-Assoziation 296find 280find_by_feldname 291find_by_sql 293freeze 272Getter- und Setter-Methoden 266inclusion 276Join-Tabelle 307length 276limit 290Mehrere Assoziationen zur selben

Tabelle 317Migration-Generator 255Migrationen 253Model generieren 249new 269numericality 277offset 290Polymorphe Assoziationen 313presence 278rake db:migrate 259seeds 270Single Table Inheritance 327Sortierreihenfolge 289Statistische Berechnungen 290Suchen 280Suchoptionen 282uniqueness 278up 256update 271update_attribute 271validates_associated 274validates_each 279validates_exclusion_of 275validates_format_of 276Validierung 272Vererbung 326Viele-zu-viele-Assoziation 307

601

Page 32: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 602 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: buch.ind , Aktueller Job: buch

Index

ActiveResource 485ActiveSupport 465ActiveSupport-Methoden

ago 471assert_valid_keys 477at 472beginning_of_day 469beginning_of_month 469beginning_of_quarter 469beginning_of_week 469beginning_of_year 469blank? 478byte 467day 471diff 477end_of_day 469end_of_month 469end_of_quarter 469end_of_week 469end_of_year 469ends_with 474exabyte 467except 477first 473fortnight 471from 473from_now 470future? 468gigabyte 467hour 471in_groups_of 475include? 476kilobyte 467last 473many? 476megabyte 467minute 471months_ago 470months_since 470multiple_of? 466next_day 470next_month 470next_week 470next_year 470ordinalize 466past? 468petabyte 467presence 479present? 478prev_day 470

prev_month 470prev_week 470prev_year 470reverse_merge 477round 467sample 476second 471since 470split 476squish 474starts_with 474stringify_keys 477symbolize_keys 477terabyte 467to 473to_date 472to_json 480to_options 477to_param 475to_sentence 475to_time 472to_yaml 480today 468today? 468tomorrow 468try 479until 471week 471year 471years_ago 470years_since 470yesterday 468

after_filter 348ago 471Ajax 501

Grundlagen 501jQuery 501

Alternative Template-Systeme 433application.rb 207around_filter 349Array-Methoden

in_groups_of 475include? 476many? 476sample 476split 476to_param 475to_sentence 475

Arrays 474auf Array-Elemente zugreifen 580

602

Page 33: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 603 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: buch.ind , Aktueller Job: buch

Index

clear 589compact 588delete 588delete_at 588delete_if 589detect 586find 586find_all 586first 581grep 587last 581length 582max 587min 587new 579nitems 583pop 589rand 585reject 586reverse 590select 586shift 589size 582sort 583sort_by 584sortieren 583uniq 590values_at 582vergleichen 583zufällig sortieren 585

assert_valid_keys 477Asset Pipeline 29, 434Assoziationen 296Assoziationen mit Bedingungen 318Assoziationen um eigene Methoden

erweitern 321at 472Authentifizierung 30, 345

HTTP-Authentifizierung 54Authentifizierungssystem 143

B

BDD 169before_filter 347beginning_of_day 469beginning_of_month 469beginning_of_quarter 469beginning_of_week 469beginning_of_year 469

blank? 478Bourbon 443Bundler 48, 202button_to 378byte 467

C

Cachen der Root-Page 538Caching 529Caching von CSS- und JavaScript-

Dateien 548Caching-Einstellungen 532Callbacks 324capitalize 562Capybara 175, 177center 562change 29, 256Checkboxen 409chomp 567chop 567CoffeeScript 28, 444Compass 443concat 566confirmation 275content_tag 393Controller-Generator 95Cookies 336count 570create 269Cross-Site Request Forgery 522Cross-Site-Scripting 521CRUD 50crypt 570CSRF Cross-Site Request ForgeryCSS 28, 440Cucumber 169cycle 392

D

Date 468Date-Methoden

beginning_of_month 469beginning_of_quarter 469beginning_of_week 469beginning_of_year 469end_of_month 469end_of_quarter 469end_of_week 469

603

Page 34: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 604 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: buch.ind , Aktueller Job: buch

Index

end_of_year 469future? 468months_ago 470months_since 470next_day 470next_month 470next_week 470next_year 470past? 468prev_day 470prev_month 470prev_week 470prev_year 470today 468today? 468tomorrow 468years_ago 470years_since 470yesterday 468

Datei-Upload 408Datenbankkonfiguration 212Datenbankschemas 253Datentyp-Klassen

Arrays 474Date 468DateTime 468Hashes 476Integer 466Numeric 466String 472Time 468Zahlen 466Zeichenketten 472

DateTime 468Datum und Zeit 468Datumsauswahllisten 410day 471debug 393Debugging 218delete 272destroy 271diff 477down 256downcase 562DRY-Prinzip 25

E

E-MailActionMailer 447

Anhänge 461Attachment 461Beispielprojekt Kontaktformular 447HTML-E-Mails 459Inline-Attachment 461Konfiguration 463Layouts 460sendmail 463SMTP 463

EdgeRails 200Editoren 43Eigene Helper entwickeln 394Eine einfache Bookmarks-

verwaltung 93Eins-zu-eins-Assoziation 304Eins-zu-viele-Assoziation 296Einzeilige Textfelder 402end_of_day 469end_of_month 469end_of_quarter 469end_of_week 469end_of_year 469ends_with 474Entwicklungsumgebungen EditorenErste Schritte 47even? 555exabyte 467except 477excerpt 388

F

Felder 474Filter 347find 280find_by_feldname 291find_by_sql 293first 473Flash-Messages 135, 340Formulare 122

Absende-Button 407Checkboxen 409Datei-Upload 408Datumsauswahllisten 410Einzeilige Textfelder 402Länderauswahllisten 419label 403Listfelder 414, 416Mehrzeilige Textfelder 404Mit Bezug zu einem Model 399

604

Page 35: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 605 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: buch.ind , Aktueller Job: buch

Index

Mit Bezug zu mehr als einemModel 423

Ohne Bezug zu einem Model 425Passworteingabefelder 405Radiobuttons 410Validierung 421Versteckte Felder 406Zeit- und Datumsauswahllisten 414Zeitauswahllisten 413

fortnight 471Fragment-Caching 543freeze 272from 473from_now 470FrontBase 196future? 468

G

Gemfile 202Generatoren 231

Controller-Generator 95Mailer 453Model-Generator 109Scaffold 50

Generieren eines Rails-Projekts 191Getter- und Setter-Methoden 266gigabyte 467Git 227

H

Haml 433Hash-Methoden

assert_valid_keys 477diff 477except 477reverse_merge 477stringify_keys 477symbolize_keys 477to_options 477

Hashes 476clear 595default 593delete 595delete_if 595detect 598each 596each_key 596each_pair 596

each_value 596empty? 597erzeugen 593fetch 594find 598has_key? 597has_value? 597include? 597invert 596key? 597keys 598length 597member? 597merge 599reject 595select 599shift 595size 597sort 599sortieren 599to_a 598update 599value? 597values 598values_at 598

Helper 138button_to 378content_tag 393cycle 392debug 393Eigene Helper entwickeln 394excerpt 388highlight 389image_tag 382javascript_include_tag 437link_to 376mail_to 379number_to_currency 385number_to_human_size 386number_to_percentage 387number_with_delimiter 383number_with_precision 384pluralize 390reset_cycle 392sanitize 391strip_links 391strip_tags 392stylesheet_link_tag 437truncate 389word_wrap 390

605

Page 36: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 606 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: buch.ind , Aktueller Job: buch

Index

here-document 558highlight 389hour 471HTTP-Authentifizierung 54

I

I18n 158IBM DB2 196image_tag 382in_groups_of 475include? 476inclusion 276Index 265Indizes 265Initializers 208Installation

Unter Linux 41Unter Mac OS X 34Unter Windows 40

Integer 466Integer-Methoden 466

even? 555multiple_of? 466odd? 555ordinalize 466round 467

Interaktive Ruby Shell 60irb Interaktive Ruby ShellIteratoren

all? 592any? 592each 590each_index 591map 591reverse_each 590

J

JavaScript 197, 505CoffeeScript 28jQuery 28

javascript_include_tag 437JDBC 197Join-Tabelle 307jQuery 28, 197, 501JRuby 197

K

Kapazitätseinheiten 467kilobyte 467Konsole 111, 216Konvention statt Konfiguration 25

L

Länderauswahllisten 419last 473Layout 102Layout-Partials 433Layouts 395, 460Leerräume 568length 276link_to 376Listfelder mit dynamischen

Werten 416Listfelder mit statischen Werten 414ljust 562Logging 217Lokaler Rails-Server 94Lokaler Server 215lstrip 568

M

mail_to 379Mailer 453many? 476Mashup 482Mass Assignment 518megabyte 467Mehrere Assoziationen zur selben

Tabelle 317Mehrsprachigkeit 158Mehrzeilige Textfelder 404Migration 109Migration-Generator 255Migrationen 29, 253minute 471Mixins 90Model generieren 249Model View Controller 23Model-Generator 109Module 89modulo 555months_ago 470

606

Page 37: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 607 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: buch.ind , Aktueller Job: buch

Index

months_since 470multiple_of? 466MySQL 196

N

Namensräume 89Namespaces 362Neues in Rails 3.0 26Neues in Rails 3.1 28new 269next_day 470next_month 470next_week 470next_year 470number_to_currency 385number_to_human_size 386number_to_percentage 387number_with_delimiter 383number_with_precision 384Numeric 466Numeric-Methoden

byte 467day 471exabyte 467fortnight 471gigabyte 467hour 471kilobyte 467megabyte 467minute 471petabyte 467second 471terabyte 467week 471year 471

numericality 277

O

odd? 555Oracle 196ordinalize 466Ordinalzahlen 466

P

Page-Caching 530params[] 333

Partials 141Layout-Partials 433Shared Partials 432Variablen locals 431

Passworteingabefelder 405past? 468Performance

Action-Caching 540Cachen der Root-Page 538Caching 529Caching von CSS- und JavaScript-

Dateien 548Caching-Einstellungen 532Fragment-Caching 543Page-Caching 530

Persistenz 24petabyte 467Pflichfelder definieren 114PHP 473pluralize 390Polymorphe Assoziationen 313PostgreSQL 196presence 278, 479present? 478prev_day 470prev_month 470prev_week 470prev_year 470Prototype 197

R

Radiobuttons 410Rails

Datenbankkonfiguration 212Debugging 218DRY 25EdgeRails 200Editoren 43Generatoren 231Generieren eines Rails-Projekts 191Installation 33Konfiguration 207Konvention statt Konfiguration 25Lokaler Server 215Neues in Rails 3.0 26Neues in Rails 3.1 28Persistenz 24Rails-Konsole 216Rake 220

607

Page 38: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 608 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: buch.ind , Aktueller Job: buch

Index

Umgebungseinstellungen 210Verzeichnisstruktur 192Warum Ruby? 22Wie entstand Rails? 21

rails console 465Rails-Konsole 111, 216, 465Rake 220rake db:migrate 259redirect_to 343Refaktorisierung 138Reguläre Ausdrücke 573Relationen Assoziationenrender 338request 334require 502reset_cycle 392respond_to 340Ressourcen

erweitern 367Singuläre 364verschachtelt 359

REST-Standard 355reverse 571reverse_merge 477rjust 562root-Route 354Routing 351RSpec 175rstrip 568Ruby

Arrays 579capitalize 562case 73center 562chomp 567chop 567concat 566count 570crypt 570delete 572downcase 562even? 555Hashes 592here-document 558if 71include 565index 565Interaktive Ruby Shell 60irb 60Iteratoren 590

Klassen 77ljust 562lstrip 568Mehrfachverzweigungen 73Mixins 90Module 89multiple_of? 555Namensräume 89Objekte und Datentypen 65odd? 555Reguläre Ausdrücke 573reverse 571rindex 565rjust 562rstrip 568scan 566Schleifen 75sprintf 561squeeze 571strip 568swapcase 562Symbole 572to_f 568to_i 568Try Ruby 62until-Schleife 75upcase 562Variablen 64Verzweigungen 71Was ist Ruby? 57while-Schleife 75Zahlen 553Zeichenketten 556

Runden 467Rundungen 467

S

sample 476sanitize 391Sass 28, 440Scaffold 50SCSS 28, 440second 471seeds 270send_data 345send_file 344sendmail 463Session Fixation 524Session Hijacking 524

608

Page 39: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 609 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: buch.ind , Aktueller Job: buch

Index

Sessions 337Shared Partials 432Sicherheit

Cross-Site-Request-Forgery 522Cross-Site-Scripting 521Mass Assignment 518Session Fixation 524Session Hijacking 524SQL Injection 517Warum Sicherheit wichtig ist 517

since 470Single Table Inheritance 327Singuläre-Ressourcen 364SMTP 463SOAP 482Sortierreihenfolge 289split 476sprintf 561Sprockets 502SQL Injection 517SQL-Server 197SQLite 196squeeze 571squish 474starts_with 474Statistische Berechnungen 290String-Methoden

at 472ends_with 474first 473from 473last 473squish 474starts_with 474to 473

stringify_keys 477strip 568strip_links 391strip_tags 392stylesheet_link_tag 437Suchoptionen 282swapcase 562Sweeper 536Symbole 572symbolize_keys 477

T

TDD 169Teil-Stings 563

Templates 371terabyte 467Textfelder

Einzeilige 402Mehrzeilige 404

Time 468to 473to_date 472to_json 480to_options 477to_param 475to_sentence 475to_time 472to_yaml 480today 468today? 468tomorrow 468truncate 389try 479Try Ruby 62

U

Umgebungseinstellungen 210uniqueness 278Unobtrusive JavaScript 502until 471until-Schleife 75up 256upcase 562update 271update_attribute 271

V

validates 114validates_associated 274validates_each 279validates_exclusion_of 275validates_format_of 276Validierung 272, 421Vererbung 326Verschachtelte Ressourcen 359Versionsverwaltung 227Versteckte Felder 406Verzeichnisstruktur einer Rails-Appli-

kation 192Viele-zu-viele-Assoziation 307View erstellen 99

609

Page 40: Ruby on Rails 3 - Amazon Simple Storage Service (S3) · PDF fileHussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902 Layout: gp.cls, Version 3.4.002 (14th

Hussein Morsy, Tanja Otto Ruby on Rails 3.1 Galileo Press, ISBN: 978-3836214902Layout: gp.cls, Version 3.4.002 (14th August 2011), (C) Dr. Daniel Lauer, Bonn Mit TEX bearbeitet am 5. Dezember 2011, 13:51 Uhr Umlaut-Check: äöüÄÖÜ.

S. 610 Einstellungen: mit Marginalien – ohne Seitenrand – mit Taben – mit Kapitel-Intro – normal breit – Zoom auf 100.0%Aktuelle Quelldatei: buch.ind , Aktueller Job: buch

Index

W

Warum Ruby? 22Was ist Ruby? 57Webservice anbieten 482Webservices 481week 471Weiterleitungen 343where 286while-Schleife 75Whitespaces 568Wie entstand Rails? 21word_wrap 390

X

XML 505XSRF Cross-Site Request ForgeryXSS Cross-Site-Scripting

Y

year 471years_ago 470years_since 470yesterday 468

Z

Zahlen 466, 553Zeichenketten 556

formatieren 561Groß- und Kleinschrift 562in Zahlen konvertieren 568length 560split 560suchen 565Teil-Stings 563umkehren 571verschlüsseln 570Zeichen zählen 570

Zeit- und Datumsauswahllisten 414Zeitauswahllisten 413

610