ruby on rails 3 - amazon simple storage service (s3) · pdf filehussein morsy, tanja otto ruby...
TRANSCRIPT
Hussein Morsy, Tanja Otto
Ruby on Rails 3.1
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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