Spis treści
Wprowadzenie
Dla kogo przeznaczona jest ta książka?
Wiemy, co sobie myślisz
Metapoznanie — myślenie o myśleniu
Oto, co możesz zrobić, by skłonić swój mózg do posłuszeństwa
Ważne informacje
Zespół korektorów merytorycznych
Podziękowania
Rozdział 1. Naprawdę szybkie Rails
Aplikacja musi robić wiele rzeczy
Co jest potrzebne aplikacji?
Rails służy do tworzenia aplikacji bazodanowych, takich jak system sprzedaży biletów
Nową aplikację tworzy się za pomocą polecenia rails
Teraz do domyślnej aplikacji trzeba dodać własny kod
Rusztowanie to kod GENEROWANY
W bazie danych nie ma jeszcze tabel!
Tabelę tworzy się dzięki wykonaniu migracji
Pięknie! Uratowałeś pracę kumpla!
By zmodyfikować aplikację, musisz przyjrzeć się jej architekturze
Trzy części Twojej aplikacji: model, widok i kontroler
Trzy typy kodu przechowywane są w OSOBNYCH folderach
Trzeba zmodyfikować pliki WIDOKU
Edycja kodu HTML w widoku
Aplikacja musi teraz przechować większą liczbę informacji
Migracja to po prostu skrypt w języku Ruby
Rails może generować migracje
Nadaj swojej migracji odpowiednią nazwę, a Rails napisze za Ciebie kod
Migrację należy wykonać za pomocą rake
Sama zmiana bazy danych nie wystarczy
Dlaczego Rails mówi do mnie po angielsku?
Uczymy Rails języków obcych
Rozdział 2. Aplikacje Rails — stworzone, by nimi zarządzać
Rusztowanie robi O WIELE za dużo
Zaczynamy od wygenerowania modelu MeBay…
…a następnie utworzymy tabelę za pomocą polecenia rake
Ale co z kontrolerem?
Widok tworzony jest przez szablon strony
Szablon strony zawiera kod HTML
Trasa mówi Rails, gdzie znajduje się strona
Widok nie ma danych do wyświetlenia
Co zatem powinna pokazywać strona?
Kontroler przesyła ogłoszenie do widoku
Rails zmienia rekord w obiekt
Dane znajdują się w pamięci, a strona internetowa je widzi
Jest problem — ludzie nie potrafią znaleźć żądanych stron
Trasy wykonywane są w kolejności
By przesłać dane do widoku, będziesz potrzebował kodu kontrolera
Strona indeksująca potrzebuje danych ze WSZYSTKICH rekordów
Metoda Ad.find(:all) wczytuje całą tabelę naraz
Dane zwracane są jako obiekt zwany tablicą
Tablica to ponumerowana sekwencja obiektów
Wczytanie wszystkich ogłoszeń za pomocą pętli for
Potrzebny nam kod HTML dla każdego elementu tablicy
Rails konwertuje szablony stron na kod języka Ruby
Pętle można dodawać do szablonów stron za pomocą scriptletów
Z każdym przejściem pętli strona generuje jeden odnośnik
Jak wygląda wygenerowany kod HTML?
Ale my mamy dwa szablony stron… czy powinniśmy zmieniać kod każdego z nich?
A co z nową treścią statyczną wysłaną przez MeBay?
Rozdział 3. Wszystko się zmienia
Ludzie chcą sami publikować ogłoszenia w Internecie
Wiesz już, jak budować aplikację publikującą dane z bazy
Zapisywanie danych działa dokładnie ODWROTNIE do ich odczytywania
Potrzebny nam formularz służący do dodawania danych oraz metoda akcji zapisująca te dane
Czy formularze i obiekty są ze sobą powiązane?
Rails może tworzyć formularze powiązane z obiektami modelu
Obiekt formularza @ad nie został utworzony
Obiekt formularza musi zostać utworzony przed wyświetleniem formularza
Obiekt ogłoszenia formularza zostanie utworzony w akcji new kontrolera
Każdy szablon strony ma teraz odpowiadającą mu metodę kontrolera
Formularz nie odsyła obiektu, odsyła DANE
Rails musi przekształcić dane na obiekt przed ich zapisaniem
Metoda create kontrolera krok po kroku
Kontroler musi zapisać rekord
Nie twórz nowej strony, użyj istniejącej
Jak jednak akcja kontrolera może wyświetlać stronę INNEJ akcji?
Przekierowania pozwalają kontrolerowi określić, który widok zostanie wyświetlony
Ale co się dzieje, kiedy ogłoszenie należy po opublikowaniu poprawić?
Uaktualnienie ogłoszenia przypomina utworzenie go… tylko jest trochę inne
Zamiast tworzyć ogłoszenie, musimy je odnaleźć; zamiast je zapisać, musimy je uaktualnić
Ograniczanie dostępu do funkcji
…teraz jednak stare ogłoszenia trzeba usunąć
Wykonanie tego samodzielnie dało Ci możliwość zrobienia więcej, niż potrafi rusztowanie
Rozdział 4. Prawda czy konsekwencje?
Dbaj o siebie z Rubyville Health Club
Aplikacja w zasadzie wygląda dość podobnie…
Poprawimy rusztowanie
Zaprojektowanie opcji wyszukiwania
Zacznijmy od utworzenia formularza
Dodanie wyszukiwania do interfejsu
Jak możemy znaleźć rekordy klientów?
Potrzebne nam jedynie te rekordy, gdzie client_name = łańcuch wyszukiwania
Dla każdego atrybutu istnieje metoda wyszukująca
Musimy dopasować albo nazwisko klienta, albo trenera
Metody wyszukujące piszą zapytania do bazy danych
Musimy być w stanie zmodyfikować warunki wykorzystane w zapytaniu SQL
Kod SQL podaje się za pomocą :conditions
Rozdział 5. Zapobieganie błędom
Uwaga — pojawiły się niepoprawne dane
Kod sprawdzający poprawność danych przynależy do MODELU
Na potrzeby prostego sprawdzania poprawności danych Rails wykorzystuje walidatory
Jak działają walidatory?
Sprawdźmy, czy coś jest liczbą
Użytkownicy pomijają niektóre pola formularzy
Jak sprawdzamy obowiązkowe pola?
Walidatory są proste i działają dobrze
W MeBay wydarzyło się coś dziwnego
Walidatory sprawdzają, jednak nie wyświetlają błędów
Jeśli tworzysz własne strony, musisz także pisać własny kod komunikatów o błędach
Kontroler musi wiedzieć, czy wystąpił błąd
Nadal musimy wyświetlić komunikaty o błędach!
System MeBay wygląda przepięknie
Rozdział 6. Łączenie wszystkiego razem
Linie Coconut Airways potrzebują nowego systemu rezerwacji
Chcemy widzieć loty i rezerwacje miejsc razem
Zobaczmy, co daje nam rusztowanie dla miejsc
Na stronie lotu musi się znaleźć formularz rezerwacji oraz lista miejsc
Jak możemy podzielić zawartość strony na odrębne pliki?
ERb SKŁADA nasze strony
Jak można utworzyć szablon częściowy formularza rezerwacji?
Teraz musimy dołączyć szablon częściowy do szablonu strony
Musimy przekazać szablonowi częściowemu miejsce!
Zmienne lokalne można przekazywać do szablonu częściowego
Niezbędny jest nam szablon częściowy dla listy miejsc
Ludzie trafiają na niewłaściwe loty
Powiązanie łączy ze sobą modele
Jak jednak definiujemy powiązanie?
Niektóre osoby mają jednak za duży bagaż
Musimy napisać WŁASNY walidator
Potrzebne nam jest ODWROTNE powiązanie
System wystartował w Coconut Airways
Rozdział 7. Ograniczanie ruchu
Linie Coconut Airways mają nową ofertę
Które części strony najbardziej się zmieniają?
Czy przeglądarka nie uaktualnia zawsze całej strony?
Co INNEGO może wykonać żądanie?
Najpierw musimy dołączyć biblioteki Ajaksa…
…a następnie dodać odnośnik „Odśwież” oparty na Ajaksie
Przeglądarka musi prosić o uaktualnienie
Czy jednak POWINNIŚMY nakazywać przeglądarce nieustanne proszenie?
Licznik obsługuje się podobnie jak przycisk czy odnośnik
Ktoś ma kłopot ze swoim wieczorem kawalerskim
Formularz musi wykonać żądanie oparte na Ajaksie
Formularz musi pozostawać pod KONTROLĄ JavaScriptu
Musimy zastąpić metodę create
Jaki efekt ma ten kod?
Teraz pojawił się problem z rezerwacjami lotów
Potrafimy uaktualnić jedną część strony naraz
Kontroler musi zamiast HTML zwracać kod w JavaScripcie
Co generuje Rails?
Jeśli nie powiesz, gdzie umieścić odpowiedź, zostanie ona wykonana
Rozdział 8. Wszystko wygląda teraz inaczej…
Zdobywanie szczytów świata
Użytkownicy nienawidzą interfejsu aplikacji!
Dane muszą się znaleźć na mapie
Musimy utworzyć nową akcję
Nowa akcja wydaje się działać…
Nowa strona potrzebuje mapy… w tym właśnie rzecz!
Jakiego typu kod jest nam potrzebny?
Kod ten działa jedynie dla serwera lokalnego
Teraz potrzebne nam dane mapy
Co zatem powinniśmy wygenerować?
Wygenerujemy kod XML z modelu
Obiekt modelu może generować kod XML
Jak powinien wyglądać taki kod kontrolera?
Tymczasem na wysokości kilku tysięcy metrów…
Musimy generować XML oraz HTML
XML i HTML to po prostu reprezentacje
W jaki sposób powinniśmy decydować, z którego formatu skorzystać?
Jak działa strona z mapą?
Kod jest gotowy do opublikowania
Kanały RSS to po prostu kod XML
Utworzymy akcję o nazwie news
Musimy zmienić strukturę kodu XML
Użyjemy nowego typu szablonu — XML Builder
Teraz dodajmy kanały RSS do stron
Zdobyłeś szczyt!
Rozdział 9. Kolejne kroki
Zdarzeń jest zbyt dużo!
Mapa mogłaby pokazywać więcej szczegółów
Możemy rozszerzyć funkcjonalność mapy za pomocą Ajaksa
Jak jednak możemy przekształcić stronę indeksującą?
Co będzie musiała wygenerować akcja show?
Nowa funkcjonalność mapy jest pełnym sukcesem!
Musimy utworzyć żądania wykorzystujące Ajaksa
Szablon częściowy mapy pozwala nam wybrać akcję new
Jak możemy UDOWODNIĆ, że zdarzenie zostało zapisane?
Formularz musi uaktualnić zawartość elementu
wyskakującego okna
Lawina!
Jak działa to teraz…
Możemy umieścić odnośnik „Edit” w oknie wyskakującym
Zaczniemy od zmodyfikowania akcji edit
Na stronie show potrzebny nam jest także nowy odnośnik
Jak stosuje się metodę pomocniczą link_to?
Na pomoc spieszy odnośnik oparty na Ajaksie
Używamy niewłaściwej trasy!
Na wybór trasy ma wpływ metoda HTTP
Czym jest zatem metoda HTTP?
Witryna Head First Climbers Cię potrzebuje!
Rozdział 10. Rails w świecie rzeczywistym
Patrz! Eksperymenty z językiem Ruby!
Aplikacje internetowe muszą być testowane
Jakie rodzaje testów są dostępne?
Udostępnienie aplikacji użytkownikom
Jak zmienia się bazę danych?
Czym jest architektura REST?
Aplikacje internetowe pobłądziły
Życie na krawędzi
Uzyskanie dodatkowych informacji
Nieco dodatkowej lektury…
Książki Head First o podobnej tematyce
Koniec wycieczki…