Ruby on Rails 3.1 - Installation, Programmierung, Praxisbeispiele. Inkl. Einführung in Ruby und MVC, Testen mit Cucumber, Deployment auf Heroku
von: Hussein Morsy, Tanja Otto
Galileo Press, 2011
ISBN: 9783836214902
Sprache: Deutsch
611 Seiten, Download: 6209 KB
Format: PDF, auch als Online-Lesen
Mehr zum Inhalt
Ruby on Rails 3.1 - Installation, Programmierung, Praxisbeispiele. Inkl. Einführung in Ruby und MVC, Testen mit Cucumber, Deployment auf Heroku
Auf einen Blick | 4 | ||
Inhalt | 6 | ||
Einleitung | 18 | ||
1 Einführung | 22 | ||
1.1 Wie entstand Rails? | 22 | ||
1.2 Warum Ruby? | 23 | ||
1.3 Model View Controller | 24 | ||
1.4 Persistenz | 25 | ||
1.5 Konvention statt Konfiguration | 26 | ||
1.6 Das DRY-Prinzip | 26 | ||
1.7 Neues in Rails 3.0 | 27 | ||
1.8 Neues in Rails 3.1 | 29 | ||
1.9 Top-Ten-Websites zu Ruby on Rails | 31 | ||
2 Installation | 34 | ||
2.1 Allgemeines | 34 | ||
2.2 Installation unter MacOS X | 35 | ||
2.2.1 Compiler installieren | 36 | ||
2.2.2 Paketmanager Homebrew | 36 | ||
2.2.3 Datenbanken installieren | 38 | ||
2.2.4 Ruby installieren mit »rbenv« | 38 | ||
2.2.5 Rails installieren | 41 | ||
2.3 Installation unter Windows | 41 | ||
2.4 Installation unter Linux | 42 | ||
2.4.1 Basisinstallation mit »apt-get« | 42 | ||
2.4.2 Datenbanken installieren | 43 | ||
2.4.3 Installation von »rbenv« | 43 | ||
2.5 Editoren und Entwicklungsumgebungen | 44 | ||
2.5.1 TextMate | 44 | ||
2.5.2 Sublime Text | 44 | ||
2.5.3 Vim | 45 | ||
2.5.4 Emacs | 45 | ||
2.5.5 IntelliJ IDEA und RubyMine | 45 | ||
2.5.6 Aptana | 46 | ||
2.5.7 Visual Studio | 46 | ||
3 Unsere erste Rails-Applikation | 48 | ||
3.1 Eine Rails-Applikation erstellen | 48 | ||
3.2 Der lokale Rails-Server | 49 | ||
3.3 Grundgerüst mit Scaffolds erstellen | 51 | ||
3.4 Die Applikation im Browser aufrufen | 52 | ||
3.5 Startseite festlegen | 55 | ||
3.6 HTTP-Authentifizierung | 55 | ||
4 Einführung in Ruby | 58 | ||
4.1 Was ist Ruby? | 58 | ||
4.1.1 Geschichte | 58 | ||
4.1.2 Eigenschaften | 59 | ||
4.1.3 Compiler oder Interpreter? | 60 | ||
4.1.4 Ruby-Versionen | 60 | ||
4.2 Ruby-Code ausführen | 61 | ||
4.2.1 Quelltext | 61 | ||
4.2.2 Interaktive Ruby Shell – »irb« | 61 | ||
4.2.3 Im Webbrowser: Try Ruby | 63 | ||
4.3 Grundlagen | 64 | ||
4.3.1 Syntax | 64 | ||
4.3.2 Variablen | 65 | ||
4.3.3 Objekte und Datentypen | 66 | ||
4.3.4 Eine Frage des Stils | 71 | ||
4.4 Kontrollstrukturen | 72 | ||
4.4.1 Verzweigungen | 72 | ||
4.4.2 Mehrfachverzweigungen | 74 | ||
4.4.3 Rubys eigene Logik: true und false | 75 | ||
4.4.4 Schleifen | 76 | ||
4.4.5 Iteratoren | 77 | ||
4.5 Klassen | 78 | ||
4.5.1 Klassen definieren | 78 | ||
4.5.2 Automatische Accessoren | 80 | ||
4.5.3 Initialisieren von Objekten | 80 | ||
4.5.4 Zugriff auf Methoden | 81 | ||
4.5.5 Parameter | 82 | ||
4.5.6 Operatoren sind Methoden | 84 | ||
4.5.7 Konstanten in Klassen | 85 | ||
4.5.8 Klassenmethoden | 86 | ||
4.5.9 Sichtbarkeit | 87 | ||
4.5.10 Vererbung | 88 | ||
4.6 Module | 90 | ||
4.6.1 Namensräume | 90 | ||
4.6.2 Mixins | 91 | ||
5 Rails Schritt für Schritt entdecken | 94 | ||
5.1 Rails-Projekt erstellen | 95 | ||
5.1.1 Erstellung des Bookmarks-Controllers | 96 | ||
5.1.2 View erstellen | 100 | ||
5.2 Weitere Views anlegen | 101 | ||
5.3 Layout | 103 | ||
5.4 Model | 108 | ||
5.4.1 Migration | 110 | ||
5.4.2 ActiveRecord | 112 | ||
5.4.3 Datenbankzugriff in der Konsole testen | 112 | ||
5.5 CRUD (Create, Read, Update, Delete) | 117 | ||
5.6 Fehlerbehandlung in Formularen | 133 | ||
5.7 Flash-Messages | 136 | ||
5.8 Refaktorisierung mit Helper und Partials | 139 | ||
5.8.1 Helper | 139 | ||
5.8.2 Partials | 142 | ||
5.9 Authentifizierung | 144 | ||
5.10 Jeder User hat seine eigenen Bookmarks | 154 | ||
5.11 Mehrsprachigkeit mit I18n | 159 | ||
6 Testen mit Cucumber | 170 | ||
6.1 Test Driven Development | 170 | ||
6.1.1 Was ist Cucumber? | 172 | ||
6.2 Eine Beispielapplikation | 172 | ||
6.2.1 Generierung der Cucumber-Dateien | 173 | ||
6.2.2 Feature anlegen | 173 | ||
6.2.3 Erweiterungen | 190 | ||
Rails-Projekte erstellen und konfigurieren | 192 | ||
7.1 Generieren eines Rails-Projektes | 192 | ||
7.1.1 Verzeichnisstruktur einer Rails-Applikation | 193 | ||
7.1.2 Datenbankoptionen | 196 | ||
7.1.3 JavaScript-Framework-Optionen | 198 | ||
7.1.4 Skip-Optionen | 199 | ||
7.1.5 Sonstige Optionen | 200 | ||
7.1.6 EdgeRails | 201 | ||
7.1.7 Rails-Projekte mit einer Vorlage generieren | 201 | ||
7.2 RubyGems managen mit Bundler | 203 | ||
7.2.1 RubyGems installieren | 203 | ||
7.2.2 Gemfile | 204 | ||
7.2.3 Bundler | 206 | ||
7.3 Konfiguration von Rails-Applikationen | 208 | ||
7.3.1 »application.rb« | 208 | ||
7.3.2 Initializers | 209 | ||
7.3.3 Umgebungseinstellungen | 211 | ||
7.3.4 Datenbankkonfiguration | 213 | ||
7.4 Rails-Applikationen ausführen | 216 | ||
7.4.1 Lokaler Server | 216 | ||
7.4.2 Rails-Konsole | 217 | ||
7.4.3 Logging | 218 | ||
7.4.4 Debugging | 219 | ||
7.5 Rake-Tasks | 221 | ||
7.5.1 Rake-Tasks ausführen | 222 | ||
7.5.2 Rake-Tasks im Überblick | 222 | ||
7.5.3 Eigene Rake-Tasks erstellen | 226 | ||
7.6 Versionsverwaltung | 228 | ||
7.6.1 Ein Rails-Projekt mit Git verwalten | 229 | ||
7.6.2 Ignorieren von Dateien und Verzeichnissen | 230 | ||
7.6.3 Git-Befehle | 230 | ||
7.6.4 GitHub | 231 | ||
7.7 Generatoren | 232 | ||
7.7.1 Verwendung | 232 | ||
7.7.2 Übersicht aller Generatoren | 233 | ||
7.7.3 Rückgängig machen | 238 | ||
7.7.4 Generatoren konfigurieren | 238 | ||
8 Datenbankzugriff mit ActiveRecord | 240 | ||
8.1 Einführung | 240 | ||
8.1.1 Vor- und Nachteile | 242 | ||
8.1.2 Unterstützte Datenbanksysteme | 243 | ||
8.1.3 Erstellen und Löschen von Datenbanken | 244 | ||
8.1.4 Ein erstes Beispiel | 245 | ||
8.1.5 Tabelle erstellen | 246 | ||
8.2 Generatoren | 250 | ||
8.2.1 Übersicht | 251 | ||
8.2.2 Model-Generator-Beispiel | 252 | ||
8.3 Datenbankschema und Migrationen | 254 | ||
8.3.1 Migration-Skripte | 256 | ||
8.3.2 Namenskonvention | 259 | ||
8.3.3 Änderungen ausführen | 260 | ||
8.3.4 Änderungen rückgängig machen | 260 | ||
8.3.5 Schnappschuss eines Datenbankschemas | 261 | ||
8.3.6 Datentypen in Migrationen | 263 | ||
8.3.7 Tabellenfelder verwalten | 263 | ||
8.3.8 Tabellen verwalten | 265 | ||
8.3.9 Indizes verwalten | 266 | ||
8.3.10 SQL-Befehle direkt verwenden | 267 | ||
8.4 Getter- und Setter-Methoden | 267 | ||
8.4.1 Überschreiben der Getter- und Setter-Methoden | 269 | ||
8.4.2 Eigene Methoden | 269 | ||
8.5 Erstellen, bearbeiten und löschen | 270 | ||
8.5.1 Neues ActiveRecord-Objekt erstellen | 270 | ||
8.5.2 Objekt erstellen und direkt speichern | 270 | ||
8.5.3 Aktualisieren von Objekten | 272 | ||
8.5.4 Löschen von Objekten | 272 | ||
8.6 Validierung | 273 | ||
8.6.1 »acceptance« | 275 | ||
8.6.2 »validates_associated« | 275 | ||
8.6.3 »confirmation« | 276 | ||
8.6.4 »exclusion« | 276 | ||
8.6.5 »inclusion« | 277 | ||
8.6.6 »format« | 277 | ||
8.6.7 »length« | 277 | ||
8.6.8 »numericality« | 278 | ||
8.6.9 »presence« | 279 | ||
8.6.10 »uniqueness« | 279 | ||
8.6.11 »validates_each« | 280 | ||
8.6.12 Validierungsoptionen | 280 | ||
8.6.13 Selbstdefinierte Validierungen | 281 | ||
8.7 Suchen | 281 | ||
8.7.1 Suche nach IDs | 282 | ||
8.7.2 Suchmethoden im Überblick | 283 | ||
8.7.3 Suchbedingung (»where«) | 287 | ||
8.7.4 Sortierreihenfolge (»order«) | 290 | ||
8.7.5 Limitieren der Suchergebnisse (»limit«, »offset«) | 291 | ||
8.7.6 Statistische Berechnungen | 291 | ||
8.7.7 Suchen mit dynamischen »find«-Methoden | 292 | ||
8.7.8 Suche über SQL | 294 | ||
8.7.9 Selbstdefinierte Suchmethoden (Scope) | 294 | ||
8.8 Assoziationen | 297 | ||
8.8.1 Eins-zu-viele-Assoziationen (1:n) | 297 | ||
8.8.2 Eins-zu-eins-Assoziationen (1:1) | 305 | ||
8.8.3 Viele-zu-viele-Assoziationen (n:m) | 308 | ||
8.8.4 Polymorphe Assoziationen | 314 | ||
8.8.5 Mehrere Assoziationen zum gleichen Model | 318 | ||
8.8.6 Assoziationen mit Bedingungen | 319 | ||
8.8.7 Eine Assoziation, um eigene Methoden erweitern | 322 | ||
8.8.8 SQL-Abfragen reduzieren mit »includes« | 322 | ||
8.8.9 Komplexe Suchabfragen mit »joins« | 323 | ||
8.9 Callbacks | 325 | ||
8.10 Vererbung | 327 | ||
9 Steuerzentrale mit ActionController | 332 | ||
9.1 Grundlagen | 332 | ||
9.2 Aufgaben des Controllers | 334 | ||
9.2.1 Daten aus HTTP-Anfragen empfangen | 334 | ||
9.2.2 Datenbankabfragen über Model-Klassen | 336 | ||
9.2.3 Setzen und Abfragen von Cookies | 337 | ||
9.2.4 Setzen und Abfragen von Sessions | 338 | ||
9.2.5 Templates aufrufen | 339 | ||
9.2.6 Setzen von Flash-Messages | 341 | ||
9.2.7 Weiterleitungen | 344 | ||
9.2.8 Senden von Dateien und Daten | 345 | ||
9.2.9 Authentifizierung | 346 | ||
9.3 Filter | 348 | ||
9.3.1 Filtertypen | 348 | ||
9.3.2 Filter nur auf bestimmte Actions anwenden | 350 | ||
10 Routing mit ActionDispatch | 352 | ||
10.1 Routing-Grundlagen | 352 | ||
10.1.1 Elementare Routing-Einträge | 352 | ||
10.1.2 Bedingungen definieren mit »constraints« | 355 | ||
10.1.3 Weiterleitungen | 355 | ||
10.1.4 Die »root«-Route | 355 | ||
10.2 Routing mit Ressourcen | 356 | ||
10.2.1 Der REST-Standard | 356 | ||
10.2.2 Ressourcen mit Generatoren erstellen | 358 | ||
10.2.3 Routing für Ressourcen | 358 | ||
10.2.4 Verschachtelte Ressourcen | 360 | ||
10.2.5 Namespaces | 363 | ||
10.2.6 Singuläre Ressourcen | 365 | ||
10.2.7 Ressourcen erweitern | 368 | ||
11 HTML5, Sass und CoffeeScript mit ActionView | 372 | ||
11.1 ERB-Templates | 373 | ||
11.2 Erstellung von Templates | 375 | ||
11.3 Helper | 376 | ||
11.3.1 Helper für Verlinkungen | 377 | ||
11.3.2 Helper zur Zahlenformatierung | 384 | ||
11.3.3 Helper zur Textmanipulation | 389 | ||
11.3.4 Helper zur Entfernung von HTML-Code | 392 | ||
11.3.5 Sonstige Helper | 393 | ||
11.3.6 Eigene Helper entwickeln | 395 | ||
11.4 Layouts | 396 | ||
11.4.1 Mehrere »yield«-Bereiche | 397 | ||
11.4.2 Verschachtelte Layouts | 399 | ||
11.4.3 Layouts im Controller festlegen | 399 | ||
11.5 Formulare | 400 | ||
11.5.1 Formulare mit Bezug zu einem Model | 400 | ||
11.5.2 Validierung | 422 | ||
11.5.3 Formulare mit Bezug zu mehr als einem Model | 424 | ||
11.5.4 Formulare ohne Bezug zu einem Model | 426 | ||
11.6 Partials | 429 | ||
11.6.1 Übergabe von Variablen mit »locals« | 432 | ||
11.6.2 Shared Partials | 433 | ||
11.6.3 Layout-Partials | 434 | ||
11.7 Haml als alternatives Template-System | 434 | ||
11.8 Asset Pipeline | 435 | ||
11.8.1 Asset-Verzeichnisse | 436 | ||
11.8.2 Bilder einbinden | 437 | ||
11.8.3 Stylesheets und JavaScripts einbinden | 438 | ||
11.9 Stylesheets mit Sass | 441 | ||
11.9.1 Verschachtelung | 442 | ||
11.9.2 Variablen | 442 | ||
11.9.3 Vererbung | 443 | ||
11.9.4 Mixins | 444 | ||
11.10 JavaScript mit CoffeeScript | 445 | ||
12 E-Mails senden mit ActionMailer | 448 | ||
12.1 Beispielprojekt: Kontaktformular | 448 | ||
12.2 HTML-E-Mails | 460 | ||
12.3 Layouts | 461 | ||
12.4 E-Mails mit Anhängen | 462 | ||
12.5 Konfiguration | 464 | ||
13 Nützliche Helfer mit ActiveSupport | 466 | ||
13.1 Zahlen | 467 | ||
13.1.1 Vielfaches | 467 | ||
13.1.2 Ordinalzahlen | 467 | ||
13.1.3 Rundungen | 468 | ||
13.1.4 Kapazitätseinheiten | 468 | ||
13.1.5 Datum und Zeit | 469 | ||
13.2 Zeichenketten | 473 | ||
13.3 Arrays | 475 | ||
13.4 Hashes | 477 | ||
13.5 Datentypunabhängig | 479 | ||
14 Webservices mit ActiveResource | 482 | ||
14.1 Was sind Webservices? | 482 | ||
14.2 Einen Webservice anbieten | 483 | ||
14.3 Zugriff auf Webservices mit ActiveResource | 486 | ||
15 Mehrsprachige Applikationen | 488 | ||
15.1 Konfiguration | 488 | ||
15.2 Sprachauswahl | 489 | ||
15.3 Übersetzungsdateien | 489 | ||
15.3.1 Fertige Übersetzungsdateien importieren | 491 | ||
15.4 Übersetzen und lokalisieren | 492 | ||
15.4.1 Texte | 492 | ||
15.4.2 Texte mit Platzhaltern | 494 | ||
15.4.3 Texte mit Pluralisierung | 494 | ||
15.4.4 Datums- und Zeitformatierung | 495 | ||
15.4.5 Dezimalzahlen | 496 | ||
15.4.6 Währungen | 497 | ||
15.4.7 Übersetzung von Formularen | 498 | ||
15.4.8 Weitere Helper | 499 | ||
15.4.9 Ganzseitige Übersetzungen | 500 | ||
16 Unobtrusive JavaScript und Ajax mit jQuery | 502 | ||
16.1 JavaScript-Frameworks | 502 | ||
16.1.1 jQuery | 502 | ||
16.1.2 jQuery UI | 502 | ||
16.1.3 Einbinden der JavaScript-Bibliotheken | 503 | ||
16.2 Unobtrusive JavaScript | 503 | ||
16.2.1 Grundlagen | 504 | ||
16.2.2 Unobtrusive JavaScript in Rails | 505 | ||
16.3 Ajax | 506 | ||
16.3.1 Grundlagen | 507 | ||
16.3.2 Ajax in Rails | 508 | ||
16.4 Beispiele | 510 | ||
16.4.1 Bookmark per Ajax löschen | 510 | ||
16.4.2 Ein Bookmark per Ajax hinzufügen | 513 | ||
17 Sicherheit, Deployment und Optimierung durch Caching | 518 | ||
17.1 Sicherheit | 518 | ||
17.1.1 SQL Injection | 518 | ||
17.1.2 Mass Assignment | 519 | ||
17.1.3 Cross-Site-Scripting (XSS) | 522 | ||
17.1.4 Cross-Site Request Forgery (CSRF/XSRF) | 523 | ||
17.1.5 Session Hijacking und Fixation | 524 | ||
17.2 Deployment | 526 | ||
17.2.1 Cloud Computing | 526 | ||
17.2.2 Heroku | 527 | ||
17.3 Optimierung durch Caching | 530 | ||
17.3.1 Page-Caching | 531 | ||
17.3.2 Action-Caching | 541 | ||
17.3.3 Fragment-Caching | 544 | ||
17.3.4 Caching mit der Asset Pipeline | 549 | ||
A Die wichtigsten Ruby-Klassen | 554 | ||
A.1 Zahlen | 554 | ||
A.2 Zeichenketten | 557 | ||
A.2.1 »here-document« | 559 | ||
A.2.2 Ausdrücke in Zeichenketten | 560 | ||
A.2.3 Die Methode »length« | 561 | ||
A.2.4 Die Methode »split« | 561 | ||
A.2.5 Zeichenketten formatieren | 562 | ||
A.2.6 Groß- und Kleinschrift | 563 | ||
A.2.7 Teil-Stings | 564 | ||
A.2.8 In Zeichenketten suchen | 566 | ||
A.2.9 Etwas einer Zeichenkette hinzufügen | 567 | ||
A.2.10 Angehängte Zeichen löschen | 568 | ||
A.2.11 Leerräume löschen | 569 | ||
A.2.12 Zeichenketten wiederholen | 569 | ||
A.2.13 Strings in Zahlen konvertieren | 569 | ||
A.2.14 Zeichenketten verschlüsseln | 571 | ||
A.2.15 Zeichen in einer Zeichenkette zählen | 571 | ||
A.2.16 Eine Zeichenkette umkehren | 572 | ||
A.2.17 Doppelte Zeichen entfernen | 572 | ||
A.2.18 Bestimmte Zeichen entfernen | 573 | ||
A.3 Symbole | 573 | ||
A.4 Reguläre Ausdrücke | 574 | ||
A.4.1 Syntax von regulären Ausdrücken | 574 | ||
A.4.2 Anwendungsbeispiele aus der Praxis | 577 | ||
A.5 Arrays | 580 | ||
A.5.1 Ein Array erzeugen | 580 | ||
A.5.2 Auf Array-Elemente zugreifen | 581 | ||
A.5.3 Auf die Länge eines Arrays zugreifen | 583 | ||
A.5.4 Arrays vergleichen | 584 | ||
A.5.5 Ein Array sortieren | 584 | ||
A.5.6 Zufall | 586 | ||
A.5.7 Nach Elementen in einem Array suchen | 587 | ||
A.5.8 Differenz zwischen zwei Arrays bestimmen | 589 | ||
A.5.9 »nil«-Werte aus einem Array entfernen | 589 | ||
A.5.10 Bestimmte Array-Elemente entfernen | 589 | ||
A.5.11 Ein Array umkehren | 591 | ||
A.5.12 Doppelte Einträge aus einem Array löschen | 591 | ||
A.5.13 Iteratoren | 591 | ||
A.6 Hashes | 593 | ||
A.6.1 Einen Hash erzeugen | 594 | ||
A.6.2 Schlüssel-Wert-Paare löschen | 596 | ||
A.6.3 Über einen Hash iterieren | 597 | ||
A.6.4 Schlüssel und Wert in einem Hash vertauschen | 597 | ||
A.6.5 Schlüssel und Werte in einem Hash finden | 598 | ||
A.6.6 Einen Hash in ein Array extrahieren | 599 | ||
A.6.7 Nach Schlüssel-Wert-Paaren suchen | 599 | ||
A.6.8 Einen Hash sortieren | 600 | ||
A.6.9 Zwei Hashes miteinander mischen | 600 | ||
A.6.10 Einen Hash aus einem Array erzeugen | 601 |