Przedmowa (9)
Wstęp (11)
1. Zaczynamy (17)
- 1.1. Społeczność Rails (18)
- 1.2. Szukanie dokumentacji (20)
- 1.3. Instalacja MySQL (21)
- 1.4. Instalacja PostgreSQL (24)
- 1.5. Instalacja Rails (26)
- 1.6. Zmiana wersji Ruby i instalacja Rails w systemie OS X Tiger (28)
- 1.7. Uruchamianie Rails w systemie OS X za pomocą Locomotive (30)
- 1.8. Uruchamianie Rails w systemie Windows za pomocą Instant Rails (32)
- 1.9. Aktualizacja Rails za pomocą RubyGems (34)
- 1.10. Utworzenie repozytorium Subversion własnego projektu Rails (35)
2. Praca w Rails (39)
- 2.1. Tworzenie projektu Rails (39)
- 2.2. Rozpoczynamy pracę z rusztowaniami (41)
- 2.3. Przyspieszanie Rails za pomocą serwera Mongrel (45)
- 2.4. Zwiększanie możliwości produkcyjnych w systemie Windows za pomocą Cygwin (47)
- 2.5. Wzorce pluralizacyjne w Rails (48)
- 2.6. Praca w Rails w systemie OS X za pomocą TextMate (51)
- 2.7. Wieloplatformowe tworzenie aplikacji z RadRails (53)
- 2.8. Instalacja i uruchamianie Edge Rails (54)
- 2.9. Uwierzytelnianie bezhasłowe za pomocą SSH (56)
- 2.10. Tworzenie dokumentacji RDoc do własnej aplikacji Rails (57)
- 2.11. Tworzenie w pełni funkcjonalnej aplikacji CRUD za pomocą Streamlined (60)
3. Active Record (65)
- 3.1. Przygotowanie relacyjnej bazy danych do pracy z Rails (66)
- 3.2. Programowe definiowanie schematu bazy danych (69)
- 3.3. Zarządzanie bazą za pomocą migracji (71)
- 3.4. Modelowanie bazy danych za pomocą Active Record (75)
- 3.5. Kontrola relacji modelu z konsoli Rails (78)
- 3.6. Dostęp do danych za pośrednictwem Active Record (81)
- 3.7. Wyszukiwanie rekordów przy użyciu find (82)
- 3.8. Iteracja na zestawie wyników Active Record (85)
- 3.9. Wydajne pobieranie danych przy użyciu wczesnego wczytywania (88)
- 3.10. Aktualizowanie obiektu Active Record (91)
- 3.11. Wymuszanie spójności danych przy użyciu walidacji Active Record (95)
- 3.12. Wykonywanie własnych zapytań za pomocą find_by_sql (98)
- 3.13. Ochrona przed sytuacjami wyścigu za pomocą transakcji (102)
- 3.14. Dodawanie do modelu możliwości sortowania przy użyciu acts_as_list (106)
- 3.15. Wykonywanie zadań przy każdorazowym tworzeniu obiektów modelu (110)
- 3.16. Modelowanie wątkowanego forum przy użyciu acts_as_nested_set (113)
- 3.17. Tworzenie katalogu zagnieżdżonych tematów za pomocą acts_as_tree (117)
- 3.18. Unikanie sytuacji wyścigu przy użyciu blokowania optymistycznego (120)
- 3.19. Obsługa tabel z odziedziczoną konwencją nazewniczą (122)
- 3.20. Automatyczny zapis sygnatur czasowych (123)
- 3.21. Wydzielanie wspólnych relacji za pomocą powiązań polimorficznych (125)
- 3.22. Połączenie modeli łączących i polimorfizmu w celu elastycznego modelowania danych (128)
4. Action Controller (133)
- 4.1. Dostęp do danych formularza z kontrolera (134)
- 4.2. Zmiana strony domyślnej aplikacji (137)
- 4.3. Zwiększanie przejrzystości kodu za pomocą nazwanych tras (138)
- 4.4. Konfigurowanie własnych zachowań wyboru tras (139)
- 4.5. Wyświetlanie komunikatów alarmowych za pomocą flash (141)
- 4.6. Przedłużanie okresu trwania komunikatu flash (143)
- 4.7. Podążanie za akcjami za pomocą przekierowań (144)
- 4.8. Dynamiczne generowanie adresów URL (146)
- 4.9. Kontrolowanie żądań za pomocą filtrów (147)
- 4.10. Rejestracja zdarzeń z wykorzystaniem filtrów (149)
- 4.11. Renderowanie akcji (151)
- 4.12. Ograniczanie dostępu do metod kontrolera (153)
- 4.13. Wysyłanie do przeglądarki plików lub strumieni danych (154)
- 4.14. Przechowywanie informacji o sesji w bazie danych (155)
- 4.15. Śledzenie informacji za pomocą sesji (157)
- 4.16. Uwierzytelnianie z użyciem filtrów (160)
5. Action View (165)
- 5.1. Upraszczanie szablonów za pomocą metod pomocniczych (166)
- 5.2. Wyświetlanie obszernych zbiorów danych za pomocą stronicowania (168)
- 5.3. Tworzenie lepkich list wyboru (171)
- 5.4. Edycja relacji wiele-do-wielu za pomocą list wielokrotnego wyboru (173)
- 5.5. Wyodrębnianie wspólnego kodu prezentacyjnego za pomocą makiet (176)
- 5.6. Definiowanie domyślnej makiety dla aplikacji (179)
- 5.7. Generowanie kodu XML za pomocą szablonów Builder (180)
- 5.8. Generowanie źródeł RSS z danych Active Record (181)
- 5.9. Ponowne wykorzystanie elementów za pomocą podszablonów (184)
- 5.10. Przetwarzanie pól wejściowych tworzonych dynamicznie (187)
- 5.11. Dostosowywanie zachowań standardowych metod pomocniczych (190)
- 5.12. Tworzenie formularzy WWW z wykorzystaniem metod pomocniczych (192)
- 5.13. Format daty, czasu i waluty (196)
- 5.14. Personalizacja profili użytkowników za pomocą grawatarów (198)
- 5.15. Unikanie szkodliwego kodu w widokach za pomocą szablonów Liquid (200)
- 5.16. Globalizacja aplikacji Rails (204)
6. Projektowanie z REST (209)
- 6.1. Tworzenie zagnieżdżonych zasobów (211)
- 6.2. Obsługa innych formatów danych za pomocą typów MIME (216)
- 6.3. Modelowanie relacji REST przy użyciu modeli łączących (218)
- 6.4. Poszerzanie możliwości CRUD za pomocą zasobów REST (221)
- 6.5. Korzystanie ze złożonych zagnieżdżonych zasobów REST (224)
- 6.6. Tworzenie aplikacji Rails zgodnie z REST (227)
7. Testowanie aplikacji (233)
- 7.1. Centralizacja tworzenia obiektów wspólnych dla przypadków testowych (234)
- 7.2. Tworzenie obiektów fixture dla przyporządkowań typu wiele-do-wielu (235)
- 7.3. Importowanie danych testowych za pomocą obiektów fixture CSV (237)
- 7.4. Dołączanie dynamicznych danych do obiektów fixture za pomocą ERb (239)
- 7.5. Inicjalizacja testowej bazy danych (241)
- 7.6. Interaktywne testowanie kontrolerów z poziomu konsoli Rails (243)
- 7.7. Interpretacja danych z testu jednostkowego (244)
- 7.8. Ładowanie danych testowych za pomocą obiektów fixture YAML (245)
- 7.9. Monitorowanie testu pokrycia za pomocą zadania stats rake (248)
- 7.10. Przeprowadzanie testów za pomocą narzędzia Rake (249)
- 7.11. Przyspieszanie testów za pomocą transakcyjnych obiektów fixture (250)
- 7.12. Sprawdzanie przez kontrolery za pomocą testów integracyjnych (252)
- 7.13. Sprawdzanie kontrolerów za pomocą testów funkcjonalnych (255)
- 7.14. Analiza zawartości pliku cookie (258)
- 7.15. Testowanie tras własnych i nazwanych (260)
- 7.16. Testowanie żądań HTTP za pomocą asercji związanych z odpowiedziami (262)
- 7.17. Sprawdzanie modelu za pomocą testów jednostkowych (263)
- 7.18. Jednostkowe testowanie walidacji modelu (266)
- 7.19. Weryfikacja struktury DOM za pomocą asercji znaczników (268)
- 7.20. Pisanie własnych asercji (271)
- 7.21. Testowanie wysyłania plików (272)
- 7.22. Modyfikowanie domyślnego zachowania klasy testującej przy użyciu makiet (275)
- 7.23. Uzyskiwanie większej ilości danych dzięki ciągłemu uruchamianiu testów (277)
- 7.24. Analiza pokrycia kodu za pomocą narzędzia Rcov (279)
8. JavaScript i Ajax (283)
- 8.1. Dodawanie do strony elementów DOM (284)
- 8.2. Tworzenie własnego raportu metodą przeciągnij i upuść (287)
- 8.3. Dynamiczne dodawanie elementów do listy wyboru (291)
- 8.4. Kontrolowanie ilości tekstu wprowadzanego do pola textarea (294)
- 8.5. Aktualizowanie elementów strony za pomocą szablonów RJS (297)
- 8.6. Wstawianie kodu JavaScript do szablonów (299)
- 8.7. Umożliwianie użytkownikom zmiany kolejności elementów listy (303)
- 8.8. Autouzupełnianie pól tekstowych (306)
- 8.9. Wyszukiwanie i dynamiczne wyróżnianie tekstu (308)
- 8.10. Uatrakcyjnianie interfejsu użytkownika przy użyciu efektów wizualnych (312)
- 8.11. Implementacja wyszukiwarki Live Search (316)
- 8.12. Edycja pól w miejscu (319)
- 8.13. Tworzenie paska postępu w Ajaksie (322)
9. Action Mailer (325)
- 9.1. Konfiguracja Rails do wysyłania poczty (326)
- 9.2. Tworzenie klasy mailera za pomocą generatora mailer (327)
- 9.3. Formatowanie wiadomości e-mail przy użyciu szablonów (329)
- 9.4. Dołączanie plików do wiadomości e-mail (330)
- 9.5. Wysyłanie wiadomości e-mail z aplikacji Rails (331)
- 9.6. Odbieranie poczty za pomocą mechanizmu Action Mailer (332)
10. Debugowanie aplikacji Rails (335)
- 10.1. Eksploracja Rails z poziomu konsoli (336)
- 10.2. Naprawianie błędów u źródła przy użyciu opcji Ruby -cw (338)
- 10.3. Debugowanie aplikacji w czasie rzeczywistym przy użyciu punktów wstrzymania (340)
- 10.4. Zapisywanie komunikatów do dziennika przy użyciu wbudowanej w Rails klasy Logger (343)
- 10.5. Zapisywanie danych debugowania w pliku (346)
- 10.6. Wysyłanie informacji o wyjątkach pocztą elektroniczną (348)
- 10.7. Wyświetlanie w widokach informacji o środowisku (352)
- 10.8. Wyświetlanie zawartości obiektów przy użyciu wyjątków (353)
- 10.9. Filtrowanie zawartości dziennika rozwojowego w czasie rzeczywistym (354)
- 10.10. Debugowanie połączenia HTTP przy użyciu rozszerzeń Firefoksa (356)
- 10.11. Debugowanie kodu JavaScript w czasie rzeczywistym przy użyciu powłoki JavaScript Shell (358)
- 10.12. Interaktywne debugowanie kodu za pomocą narzędzia ruby-debug (361)
11. Bezpieczeństwo aplikacji (365)
- 11.1. Zabezpieczanie systemu za pomocą silnego hasła (365)
- 11.2. Ochrona przed atakami typu SQL injection (367)
- 11.3. Ochrona przed atakami typu cross-site scripting (369)
- 11.4. Ograniczanie dostępu do publicznych metod i akcji (370)
- 11.5. Zabezpieczanie serwera poprzez zamknięcie nieużywanych portów (372)
12. Wydajność (375)
- 12.1. Mierzenie wydajności serwera za pomocą narzędzia httperf (376)
- 12.2. Testowanie wydajności fragmentów kodu aplikacji (378)
- 12.3. Zwiększanie wydajności poprzez buforowanie statycznych stron (380)
- 12.4. Okres ważności buforowanych stron (383)
- 12.5. Mieszanie treści dynamicznej i statycznej przy użyciu mechanizmu buforowania fragmentów (385)
- 12.6. Filtrowanie buforowanych stron za pomocą buforowania akcji (388)
- 12.7. Skracanie czasu dostępu do danych za pomocą systemu memcached (389)
- 12.8. Zwiększanie wydajności poprzez buforowanie treści po przetworzeniu (392)
13. Hosting i wdrażanie (395)
- 13.1. Hosting Rails na serwerze Apache 1.3 i przy użyciu mod_fastcgi (396)
- 13.2. Zarządzanie wieloma procesami Mongrel przy użyciu mongrel_cluster (397)
- 13.3. Hosting Rails na Apache 2.2, mod_proxy_balancer i Mongrel (400)
- 13.4. Wdrażanie Rails przy użyciu Pound jako frontu dla Mongrel, Lighttpd i Apache (404)
- 13.5. Dostosowywanie do własnych potrzeb rejestracji danych Pound za pomocą narzędzia cronolog (408)
- 13.6. Konfiguracja Pound z obsługą SSL (411)
- 13.7. Równoważenie obciążenia za pomocą prostego narzędzia o nazwie Pen (412)
- 13.8. Wdrażanie projektu Rails przy użyciu Capistrano (414)
- 13.9. Wdrażanie aplikacji w kilku środowiskach przy użyciu Capistrano (417)
- 13.10. Wdrażanie przy użyciu Capistrano bez dostępu do systemu Subversion (419)
- 13.11. Wdrażanie przy użyciu Capistrano i mongrel_cluster (421)
- 13.12. Wyłączanie strony podczas prac konserwacyjnych (423)
- 13.13. Pisanie własnych zadań Capistrano (426)
- 13.14. Usuwanie pozostałości po sesjach (430)
14. Rozszerzanie Rails za pomocą wtyczek (433)
- 14.1. Znajdywanie wtyczek (434)
- 14.2. Instalowanie wtyczek (435)
- 14.3. Manipulacja wersjami rekordów za pomocą wtyczki acts_as_versioned (437)
- 14.4. Uwierzytelnianie przy użyciu wtyczki acts_as_authenticated (440)
- 14.5. Upraszczanie znakowania za pomocą wtyczki acts_as_taggable (443)
- 14.6. Rozszerzanie Active Record przy użyciu wtyczki acts_as (448)
- 14.7. Dodawanie metod pomocniczych widoków do Rails jako wtyczek (453)
- 14.8. Wysyłanie plików na serwer przy użyciu wtyczki file_column (455)
- 14.9. Wysyłanie plików na serwer przy użyciu wtyczki acts_as_attachment (457)
- 14.10. Wyłączanie rekordów zamiast ich usuwania za pomocą wtyczki acts_as_paranoid (461)
- 14.11. Dodawanie bardziej wyrafinowanego mechanizmu uwierzytelniania przy użyciu wtyczki login_engine (463)
15. Grafika (467)
- 15.1. Instalowanie interfejsu RMagick do przetwarzania obrazów (467)
- 15.2. Wysyłanie obrazów do bazy danych (471)
- 15.3. Serwowanie obrazków bezpośrednio z bazy danych (475)
- 15.4. Tworzenie miniatur za pomocą RMagick (476)
- 15.5. Generowanie dokumentów PDF (479)
- 15.6. Wizualna prezentacja danych przy użyciu Gruff (481)
- 15.7. Tworzenie małych grafów przy użyciu biblioteki Sparklines (484)
A Migracja do Rails 1.2 (487)
- Action Controller (487)
- Active Record (489)
- Action View (489)
Skorowidz (491)
|