Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00350 006340 13601612 na godz. na dobę w sumie
Head First Ruby on Rails. Edycja polska - książka
Head First Ruby on Rails. Edycja polska - książka
Autor: Liczba stron: 464
Wydawca: Helion Język publikacji: polski
ISBN: 83-246-2130-X Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> webmasterstwo >> rails - programowanie
Porównaj ceny (książka, ebook, audiobook).

Bez wysiłku poznaj niesamowite możliwości Ruby on Rails
i twórz wspaniałe aplikacje

Jeśli chcesz szybko i sprawnie budować internetowe aplikacje bazodanowe, warto, abyś poznał niezwykłe możliwości Rails. Ta wyjątkowa platforma programowania pozwala tworzyć w pełni funkcjonalne aplikacje z wykorzystaniem języka Ruby. Jej wielką zaletą jest to, że wszystkie zmiany wprowadzane do aplikacji można zobaczyć natychmiast po ich zapisaniu i odświeżeniu strony w przeglądarce. Dzieje się tak dzięki zastosowaniu języka Ruby, ponieważ kod w tym języku nie musi być kompilowany.

Książkę 'Head First Ruby on Rails. Edycja polska' napisano w oparciu o najnowsze, skuteczne techniki ułatwiające zrozumienie i przyswajanie wiedzy. Dzięki temu szybko i bez trudności nauczysz się tworzyć interaktywne aplikacje internetowe za pomocą tej platformy. Dowiesz się, na czym polega współpraca z bazą danych, integracja z Ajaksem i XML oraz dynamiczne wykreślanie danych. Ponieważ to obrazy najlepiej przemawiają do Twojego umysłu, książka ta została bogato zilustrowana - abyś jak najszybciej poznał możliwości Rails i natychmiast zaczął wykorzystywać je w praktyce.

Wykorzystaj najnowsze metody uczenia się i szybko opanuj Ruby on Rails!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Head First Ruby on Rails. Edycja polska Autor: David Griffiths T³umaczenie: Anna Trojan ISBN: 978-83-246-2130-9 Tytu³ orygina³u: Head First Rails: A learner s companion to Ruby on Rails Format: 200×234, stron: 470 Bez wysi³ku poznaj niesamowite mo¿liwoœci Ruby on Rails i twórz wspania³e aplikacje Jeœli chcesz szybko i sprawnie budowaæ internetowe aplikacje bazodanowe, warto, abyœ pozna³ niezwyk³e mo¿liwoœci Rails. Ta wyj¹tkowa platforma programowania pozwala tworzyæ w pe³ni funkcjonalne aplikacje z wykorzystaniem jêzyka Ruby. Jej wielk¹ zalet¹ jest to, ¿e wszystkie zmiany wprowadzane do aplikacji mo¿na zobaczyæ natychmiast po ich zapisaniu i odœwie¿eniu strony w przegl¹darce. Dzieje siê tak dziêki zastosowaniu jêzyka Ruby, poniewa¿ kod w tym jêzyku nie musi byæ kompilowany. Ksi¹¿kê „Head First Ruby on Rails. Edycja polska” napisano w oparciu o najnowsze, skuteczne techniki u³atwiaj¹ce zrozumienie i przyswajanie wiedzy. Dziêki temu szybko i bez trudnoœci nauczysz siê tworzyæ interaktywne aplikacje internetowe za pomoc¹ tej platformy. Dowiesz siê, na czym polega wspó³praca z baz¹ danych, integracja z Ajaksem i XML oraz dynamiczne wykreœlanie danych. Poniewa¿ to obrazy najlepiej przemawiaj¹ do Twojego umys³u, ksi¹¿ka ta zosta³a bogato zilustrowana – abyœ jak najszybciej pozna³ mo¿liwoœci Rails i natychmiast zacz¹³ wykorzystywaæ je w praktyce. (cid:129) Jêzyk Ruby (cid:129) Tworzenie tabel (cid:129) Wykonywanie migracji bazy danych (cid:129) Kod modelu, widoku i kontrolera (cid:129) Tworzenie formularza (cid:129) Sprawdzanie poprawnoœci danych (cid:129) Zapobieganie b³êdom (cid:129) Do³¹czanie bibliotek Ajaksa (cid:129) Udostêpnianie aplikacji u¿ytkownikom Wykorzystaj najnowsze metody uczenia siê i szybko opanuj Ruby on Rails! Spis treści (skrócony) Wprowadzenie Prawda czy konsekwencje? Wyszukiwanie w bazie danych Zapobieganie błędom. Sprawdzanie poprawności danych Łączenie wszystkiego razem. Tworzenie połączeń 1. Naprawdę szybkie Rails. Początki 2. Aplikacje Rails — stworzone, by nimi zarządzać. Poza rusztowaniem 3. Wszystko się zmienia. Wstawianie, uaktualnianie i usuwanie 4. 5. 6. 7. Ograniczanie ruchu. Ajax 8. Wszystko wygląda teraz inaczej… XML i różne reprezentacje 9. 10. Rails w świecie rzeczywistym. Prawdziwe aplikacje Kolejne kroki. Architektura REST i Ajax Skorowidz Spis treści 21 33 81 139 189 223 255 299 343 393 437 455 Spis treści (z prawdziwego zdarzenia) W Wprowadzenie Przestawienie swojego mózgu na Rails. A zatem tutaj Ty próbujesz się czegoś nauczyć, podczas gdy Twój mózg próbuje oddać Ci przysługę, starając się, by to, czego się nauczyłeś, nie zostało zapamiętane. Twój mózg myśli sobie: „Lepiej zostawić miejsce na ważniejsze rzeczy, takie jak to, których dzikich zwierząt należy unikać i czy jazda na snowboardzie nago jest złym pomysłem”. Jak zatem możesz zmusić swój mózg do zaakceptowania przekonania, że Twoje życie uzależnione jest od poznania Rails? 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 22 23 25 27 28 30 31 9 Spis treści 1 Początki Naprawdę szybkie Rails Chcesz szybko zacząć pisać aplikacje internetowe? Powinieneś zatem poznać Rails. Rails to najfajniejsza i najszybsza platforma programowania, jaka istnieje. Pozwala tworzyć w pełni funkcjonalne aplikacje internetowe szybciej, niż kiedykolwiek wydawało się to możliwe. Początki są łatwe — wystarczy zainstalować Rails i zacząć przewracać strony książki. Zanim się zorientujesz, o lata świetlne wyprzedzisz swoich konkurentów! 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 Cała prawda o Rails 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 35 36 38 39 41 42 46 47 51 52 53 54 57 58 59 63 64 65 66 67 68 75 76 Bum! 10 Spis treści 2 Poza rusztowaniem Aplikacje Rails — stworzone, by nimi zarządzać Co tak naprawdę dzieje się w Rails? Widziałeś już, jak rusztowania generują mnóstwo kodu i pomagają pisać aplikacje internetowe w sposób niesamowicie szybki, ale co, jeśli pragniesz czegoś innego? W tym rozdziale zobaczysz, jak można przejąć kontrolę nad programowaniem w Rails, i będziesz miał okazję zajrzeć pod maskę tej platformy. Przekonasz się, w jaki sposób Rails decyduje o tym, który kod należy wykonać, jak dane wczytywane są z bazy danych i jak generowane są strony internetowe. Pod koniec rozdziału będziesz w stanie publikować dane tak, jak sam zechcesz. 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? 85 86 87 88 90 91 93 100 101 102 104 105 109 112 114 115 116 117 118 122 123 124 125 126 127 130 133 11 Spis treści 3 Wstawianie, uaktualnianie i usuwanie Wszystko się zmienia Zmiana to część życia — szczególnie w przypadku danych. Na razie widziałeś, jak można szybko wyczarować aplikację Rails dzięki rusztowaniu, a także jak napisać własny kod w celu publikacji danych z bazy. Ale co zrobić, kiedy chcemy, by użytkownicy mogli edytować dane w zaplanowany przez nas sposób? Co jeśli rusztowanie nie robi tego, co chcemy my? W tym rozdziale nauczysz się wstawiać, uaktualniać i usuwać dane dokładnie tak, jak tego chcesz. A przy okazji zobaczysz również, jak tak naprawdę działa Rails, i być może nauczysz się również czegoś o bezpieczeństwie. 151 152 140 141 142 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 143 oraz metoda akcji zapisująca te dane Czy formularze i obiekty są ze sobą powiązane? 145 Rails może tworzyć formularze powiązane z obiektami modelu 146 Obiekt formularza @ad nie został utworzony 150 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 153 155 156 157 158 164 171 178 181 165 166 169 170 187 app views new.html.erb Metoda „create” w kontrolerze „ads” Cholera… Nie umiem złamać tego paskudnie trudnego hasła! 12 Spis treści 4 Wyszukiwanie w bazie danych Prawda czy konsekwencje? Każda decyzja ma swoje konsekwencje. W Rails wiedza o tym, jak podejmować dobre decyzje, może zaoszczędzić Ci zarówno czasu, jak i wysiłku. W tym rozdziale przyjrzymy się, jak wymagania użytkownika wpływają na wybory, jakich dokonujesz, już od samego początku tworzenia Twojej aplikacji. Czy powinieneś użyć rusztowania, czy lepiej zmodyfikować wygenerowany kod? Czy powinieneś tworzyć wszystko od nowa? Bez względu na wybór, kiedy nadejdzie pora dalszego dostosowania aplikacji do własnych potrzeb, będziesz musiał nauczyć się obsługi wyszukiwania w bazie danych — dostępu do danych w sposób, który ma sens zarówno z Twojego punktu widzenia, jak i z punktu widzenia potrzeb Twoich użytkowników. Interes świetnie się kręci, ale mamy kłopot z prześledzeniem wszystkich prywatnych zajęć fitness naszych klientów. Myślisz, że dasz radę pomóc? 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 190 193 194 195 196 199 207 208 209 214 215 216 217 Aplikacja dla trenerów Create (tworzenie) Delete (usuwanie) Read (odczytywanie) Update (uaktualnianie) Search (wyszukiwanie) 13 Spis treści 5 Sprawdzanie poprawności danych Zapobieganie błędom Każdy popełnia błędy… ale wielu z nich można zapobiec! Nawet przy najlepszych chęciach użytkownicy nadal będą wprowadzać niepoprawne dane do Twojej aplikacji internetowej i to Ty będziesz musiał poradzić sobie z konsekwencjami. Wyobraź sobie, co by było, gdyby istniała jakaś metoda zapobiegania występowaniu błędów. Do tego właśnie służą walidatory. Czytaj dalej, a pokażemy Ci, jak można dodać sprytne sprawdzanie błędów w Rails do Twojej aplikacji internetowej, tak byś mógł przejąć kontrolę nad tym, jakie dane są dozwolone, a jakich należy się wystrzegać. 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 224 226 227 228 230 232 233 236 239 240 243 244 248 250 Powiedziano mi, że „paid_amount” ma wartość „$50”. “$50”? Hej! To nie jest liczba! 14 Spis treści 6 Tworzenie połączeń Łączenie wszystkiego razem Niektóre rzeczy lepsze są razem niż osobno. Posmakowałeś zatem niektórych kluczowych składników Rails. Tworzyłeś całe aplikacje internetowe, a także brałeś to, co wygenerowała platforma Rails, i przystosowywałeś do swoich potrzeb. W prawdziwym świecie życie może jednak być bardziej skomplikowane. Czytaj dalej… czas zacząć budować wielofunkcyjne strony internetowe! I nie tylko to — czas zacząć sobie radzić ze skomplikowanymi powiązaniami między danymi, a także przejąć kontrolę nad danymi, pisząc własne walidatory. Linie Coconut Airways potrzebują nowego systemu rezerwacji 256 258 Chcemy widzieć loty i rezerwacje miejsc razem Zobaczmy, co daje nam rusztowanie dla miejsc 259 Na stronie lotu musi się znaleźć formularz rezerwacji oraz lista miejsc 260 Jak możemy podzielić zawartość strony na odrębne pliki? 261 ERb SKŁADA nasze strony 265 Jak można utworzyć szablon częściowy formularza rezerwacji? 266 267 Teraz musimy dołączyć szablon częściowy do szablonu strony Musimy przekazać szablonowi częściowemu miejsce! 270 271 Zmienne lokalne można przekazywać do szablonu częściowego 278 Niezbędny jest nam szablon częściowy dla listy miejsc 280 Ludzie trafiają na niewłaściwe loty Powiązanie łączy ze sobą modele 281 283 Jak jednak definiujemy powiązanie? 285 Niektóre osoby mają jednak za duży bagaż Musimy napisać WŁASNY walidator 286 289 Potrzebne nam jest ODWROTNE powiązanie System wystartował w Coconut Airways 296 15 Stary… Zarezerwowałem lot na imprezę na plaży, ale wylądowałem na historycznej wyprawie do starej kolonii trędowatych! Spis treści 7 Ajax Ograniczanie ruchu Każdy chce uzyskać z życia jak najwięcej… podobnie z aplikacji. Bez względu na to, jak jesteś dobry w obsłudze Rails, czasami tradycyjne aplikacje internetowe sobie nie radzą. Bywa, że użytkownicy pragną czegoś bardziej dynamicznego, czegoś, co odpowiada na wszystkie ich kaprysy. Ajax pozwala tworzyć szybkie aplikacje internetowe z doskonałym czasem reakcji, zaprojektowane tak, by użytkownik mógł czerpać z Internetu jak najwięcej. Rails ma wbudowany własny zestaw bibliotek Ajaksa, które tylko czekają na to, aż ich użyjesz! Pora szybko i łatwo dodać do aplikacji fantastyczne możliwości oferowane przez technologię Ajax i zachwycić jeszcze większą liczbę użytkowników. 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 Cała prawda o Ajaksie 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 300 301 306 307 308 309 314 315 316 320 321 322 323 325 326 331 332 333 337 338 Ciii… Po prostu daj mi jeszcze raz listę rezerwacji miejsc 16 Spis treści 8 XML i różne reprezentacje Wszystko wygląda teraz inaczej… Nie da się zawsze wszystkich zadowolić. A może jednak? Dotychczas widzieliśmy, jak można wykorzystać Rails do szybkiego i łatwego tworzenia aplikacji internetowych, które idealnie pasują do pewnego zbioru wymagań. Co jednak zrobić, kiedy pojawiają się inne wymagania? Co powinniśmy zrobić, jeśli niektóre osoby chcą otrzymać proste strony internetowe, inne interesuje mashup z aplikacji firmy Google, a jeszcze inne chcą, by aplikacja była dostępna w czytniku kanałów RSS? W tym rozdziale będziemy tworzyć różne reprezentacje tych samych danych, co da nam maksymalną elastyczność przy minimalnym wysiłku. 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! 344 345 346 347 348 349 350 351 352 354 355 356 357 362 363 365 366 370 372 380 381 384 385 389 391 17 http://localhost:3000/incidents/ Incidents: index Spis treści 9 Architektura REST i Ajax Kolejne kroki Czas skonsolidować umiejętności w zakresie korzystania z aplikacji typu mashup. Dotychczas widzieliśmy, jak w celu pokazania danych geograficznych można dodać do naszych aplikacji mapy z serwisu Google Maps. Co jednak, jeśli chcemy rozszerzyć istniejącą już funkcjonalność? Czytaj dalej, a przekonasz się, jak można wzbogacić aplikacje typu mashup o bardziej zaawansowane cudeńka oparte na Ajaksie. Co więcej, przy okazji nauczysz się też nieco o architekturze REST. 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 div 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! 394 395 396 397 398 403 404 406 411 412 417 418 419 420 422 423 427 429 430 431 434 18 Spis treści 10 Prawdziwe aplikacje Rails w świecie rzeczywistym Nauczyłeś się już wiele o Ruby on Rails. By jednak zastosować tę wiedzę w prawdziwym świecie, będziesz musiał zastanowić się nad kilkoma sprawami. W jaki sposób połączyć aplikację z inną bazą danych? Jak testuje się aplikacje Rails? Jak można wydobyć maksimum możliwości z Rails oraz języka Ruby? I skąd można dowiedzieć się o najświeższych nowościach w świecie Rails? Czytaj dalej, a pokażemy Ci kierunek, dzięki któremu jeszcze bardziej rozwiniesz swoje umiejętności programistyczne. development: adapter: sqlite3 database: db/development.sqlite3 timeout: 5000 development: adapter: oracle host: mydatabaseserver username: scott password: tiger production: adapter: mysql database: my_db_name username: root password: host: localhost 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… Skorowidz SQLite Oracle MySQL S 441 442 443 444 445 446 447 448 449 450 451 453 455 19 1. Początki Naprawdę szybkie Rails Spójrz tylko na szybkość programowania tej aplikacji internetowej! Muszą używać Rails… Chcesz szybko zacząć pisać aplikacje internetowe? Powinieneś zatem poznać Rails. Rails to najfajniejsza i najszybsza platforma programowania, jaka istnieje. Pozwala tworzyć w pełni funkcjonalne aplikacje internetowe szybciej, niż kiedykolwiek wydawało się to możliwe. Początki są łatwe — wystarczy zainstalować Rails i zacząć przewracać strony książki. Zanim się zorientujesz, o lata świetlne wyprzedzisz swoich konkurentów! to jest nowy rozdział 33 Witamy w piątek Piątek, godzina 9 rano Pierwszy e-mail, jaki otwierasz, pochodzi od przyjaciela, który jest w opałach: Hej — jak się masz? Potrzebna mi *wielka* przysługa! Pamiętasz tę aplikację do sprzedaży biletów, nad którą — jak mówiłem — pracowaliśmy? Nie wygląda to za dobrze. Siedzimy nad tym od tygodni! Nasz zespół naprawdę sobie nie radzi. Czy myślisz, że mógłbyś utworzyć tę aplikację dla nas? Potrzebna nam strona internetowa, która jest w stanie: wyświetlić wszystkie sprzedane bilety, utworzyć nową transakcję sprzedaży biletu, wczytać i wyświetlić pojedynczy bilet, uaktualnić szczegóły sprzedaży, usunąć transakcję sprzedaży biletu. • • • • • Wiem — wydaje się, że to gigantyczna liczba funkcji, ale szef mówi, że to minimum opcji, jakich potrzebują; dobrze wiesz, że z tym facetem trudno się kłócić! A oto struktura danych: Ticket (bilet): name — imię i nazwisko kupującego (łańcuch znaków) seat_id_seq — numer miejsca, na przykład E14 (łańcuch znaków) address — adres kupującego (długi łańcuch znaków) price_paid — cena sprzedaży biletu (liczba dziesiętna) email_address — adres e-mail kupującego (łańcuch znaków) Załączam szkice stron internetowych, żebyś wiedział, do czego zmierzamy. Eeee, potrzebujemy tego na poniedziałek, inaczej polecę ze stołka. Pomocy! System jest zaprojektowany do użycia przez personel zatrudniony w hali koncertowej. Baza danych będzie resetowana dla każdego koncertu, więc wystarczające będzie zapisanie szczegółów jednego koncertu naraz. Myślisz, że dasz radę pomóc? 34 Rozdział 1. Aplikacja musi robić wiele rzeczy Poniżej znajdują się szkice stron. Czy pasują one do wymagań tego systemu? Na pierwszej stronie powinny być wymienione wszystkie sprzedane bilety. Na pierwszej stronie znajdzie się także przycisk, który pozwoli utworzyć nową transakcję sprzedaży biletu. Oprócz odnośnika „Show” powinien tam być także odnośnik „Edit” wykorzystywany do uaktualnienia transakcji sprzedaży biletu. Początki Obok każdego biletu na liście będzie się znajdował odnośnik podpisany „Show”, który wyświetla szczegóły pojedynczego biletu. Bum! Wreszcie będzie się tam znajdował odnośnik „Destroy” służący do usunięcia transakcji sprzedaży biletu. WYSIL SZARE KOMÓRKI Jakiego rodzaju oprogramowania będziesz potrzebował do utworzenia i uruchomienia aplikacji? jesteś tutaj 35 Poznaj swoje wymagania Co jest potrzebne aplikacji? By uruchomić aplikację na serwerze hali koncertowej, potrzebujemy kilku elementów. Potrzebne nam są: 1 2 3 4 Platforma aplikacji. Niezbędny nam będzie zbiór napisanego wcześniej kodu, który będzie stanowił podstawę aplikacji internetowej. System bazy danych. Potrzebna nam będzie jakaś baza danych, w której przechowamy dane. Serwer WWW. Musimy gdzieś uruchomić aplikację. Biblioteka mapowania relacyjno-obiektowego. By ułatwić dostęp do bazy danych, większość aplikacji internetowych wykorzystuje obecnie do przekształcenia rekordów bazy danych w obiekty bibliotekę mapowania relacyjno-obiektowego (ang. object-relational mapping, w skrócie O/R mapping lub ORM). U ż y t k o w n i c y d o s t a j ą s i ę , o t w i e r a j ą c p r z e g l ą d a r k ę i w p i s u j ą c d o a p l a d r e s U R L a p l i k a c j i . i k a c j i To jest serwer WWW. Biblioteka ORM sprawia, że baza danych wygląda jak zbiór obiektów. Oto baza danych, w której przechowywane są dane. Aplikacja internetowa wczytuje z niej dane, a także je tam zapisuje. Aplikacja internetowa działa na serwerze WWW. W czym zatem pomoże nam Rails? Bez względu na język, w jakim tworzysz aplikację, najprawdopodobniej będziesz potrzebował wszystkich trzech elementów. Jedną z najlepszych rzeczy w Rails jest to, że platforma ta zawiera całe oprogramowanie, jakiego będziesz potrzebował — dołączone za darmo. Zobaczmy, jak to działa. 36 Rozdział 1. Początki Łamigłówka Platforma Rails ma wiele wbudowanych możliwości. Twoje zadanie polega na odgadnięciu, które z elementów widocznych w basenie potrzebne nam będą w naszej aplikacji internetowej. Później elementy te należy umieścić w pustych wierszach poniżej. Nie wszystkie elementy będą nam potrzebne. 1 2 3 4 Uwaga: każdy element z basenu można wykorzystać tylko raz! i o t e k a A c t i v e R e c o r d B i b l Wbudowany serwer HTTP Baza danych SQLite3 Platforma testowa Wbudowany program pocztowy Grafika po stronie serwera Usługi oparte na REST Platforma ActionPack jesteś tutaj 37 Aplikacje bazodanowe Rails służy do tworzenia aplikacji bazodanowych, takich jak system sprzedaży biletów Sercem wielu aplikacji jest baza danych. Podstawowym celem istnienia tych aplikacji jest umożliwienie użytkownikom dostępu do zawartości bazy danych oraz edycji tych danych bez konieczności bezpośredniego korzystania z języka SQL. Jakie problemy należy rozwiązać przy połączeniu bazy danych z aplikacją internetową? Aplikacja internetowa musi zezwalać użytkownikowi na dostęp i modyfikację danych, dlatego Rails zawiera platformę aplikacji o nazwie ActionPack, która wspomaga generowanie interaktywnych stron internetowych współdziałających z bazami danych. Po drugie, aplikacje internetowe muszą być uruchamiane na serwerze WWW, który będzie w stanie wyświetlać te strony, dlatego serwer taki wbudowany jest w Rails. Po trzecie, niezbędna jest baza danych. Rails tworzy aplikacje, które skonfigurowane są do pracy ze zintegrowaną bazą danych SQLite3. Po czwarte, niezbędna jest biblioteka mapowania relacyjno-obiektowego; Rails udostępnia takową pod nazwą ActiveRecord. Dzięki temu baza danych wygląda jak zbiór prostych obiektów języka Ruby. Oprócz tych narzędzi Rails zawiera również wiele skryptów, które wspomagają zarządzanie aplikacją. Kiedy będziesz tworzył aplikację internetową opartą na bazie danych, wkrótce przekonasz się, że Rails daje Ci wszystko, czego potrzebujesz. Łamigłówka: Rozwiązanie Platforma Rails ma wiele wbudowanych możliwości. Twoje zadanie polega na odgadnięciu, które z elementów widocznych w basenie potrzebne nam będą w naszej aplikacji internetowej. Później elementy te należy umieścić w pustych wierszach poniżej. Nie wszystkie elementy będą nam potrzebne. Platforma ActionPack Baza danych SQLite3 Wbudowany serwer HTTP Biblioteka ActiveRecord W niektórych systemach operacyjnych będziesz musiał zainstalować ją niezależnie od Rails. Rails daje Ci także wszystkie te elementy, jednak w przypadku tej aplikacji nie będą Ci one potrzebne. Wbudowany program pocztowy Grafika po stronie serwera Platforma testowa Usługi oparte na REST 38 Rozdział 1. Początki Nową aplikację tworzy się za pomocą polecenia rails Jak zatem zacząć pracę z Rails? Utworzenie nowej aplikacji internetowej w Rails jest tak naprawdę bardzo proste. Wystarczy otworzyć okno wiersza polecenia lub terminala i wpisać do niego rails tickets, gdzie tickets to nazwa aplikacji, którą chcesz utworzyć. Zrób tak! Plik Edycja Okno Pomoc rails tickets Wpisz po prostu „rails tickets” w wierszu poleceń. Co to robi? Wpisanie rails tickets w sprytny sposób generuje aplikację internetową w nowym folderze o nazwie tickets. Co więcej, wewnątrz folderu tickets Rails generuje całe mnóstwo dalszych folderów i plików, które tworzą podstawową strukturę nowej aplikacji. Oznacza to, że tak naprawdę utworzyłeś całą podstawową aplikację za pomocą jednego krótkiego polecenia. Rails generuje dla Ciebie cały zbiór plików i folderów za pomocą jednego polecenia. To jest struktura całej aplikacji internetowej. Spokojnie Rails generuje mnóstwo plików i folderów, ale nie ma się tym co martwić. Wszystkie mają swoje uzasadnienie i do końca książki zrozumiesz, do czego służą. tickets README Rakefile app config db doc lib log public script test tmp vendor jesteś tutaj 39 Jazda próbna Jazda próbna Ponieważ utworzona przed chwilą aplikacja jest aplikacją internetową, by zobaczyć, jak działa, będziesz musiał uruchomić wbudowany serwer WWW. W wierszu poleceń czy terminalu wejdź do folderu tickets i wpisz ruby script/server. To jest konsola. Wchodzisz do niej za pomocą wiersza poleceń w systemie Windows lub terminala w systemach Linux lub Mac. Wejdź do folderu aplikacji… …i uruchom serwer WWW. Plik Edycja Okno Pomoc cd tickets ruby script/server Na ekranie pojawi się kilka poleceń, które potwierdzają, że serwer działa. Teraz możesz zobaczyć domyślną stronę główną, otwierając w przeglądarce adres: http://localhost:3000/ To j e s t d om y ś l n a s t r o n a g ł ów n a s e rw e r a WWW . Ciekawostki Rails domyślnie uruchamia serwer WWW na porcie 3000. Jeśli chcesz użyć innego portu, takiego jak 8000, wykonaj polecenie: ruby script/server -p 8000 40 Rozdział 1. Początki Zasada Rails: Konwencja ważniejsza od konfiguracji Teraz do domyślnej aplikacji trzeba dodać własny kod Rails od razu tworzy podstawową strukturę aplikacji, jednak będziesz musiał dodać kod robiący to, czego chcesz Ty. Każda aplikacja jest inna, ale czy Rails ma jakieś narzędzia czy sztuczki, które ułatwiają tworzenie własnego kodu? Faktycznie, tak właśnie jest. Czy zauważyłeś, że platforma Rails utworzyła dla Ciebie całą strukturę plików, prawie jakby wiedziała, czego będziesz potrzebować? Dzieje się tak, ponieważ aplikacje Rails mają bardzo silne konwencje nazewnictwa. Aplikacje Rails zawsze przestrzegają konwencji Wszystkie aplikacje Rails maję tę samą podstawową strukturę plików i wykorzystują spójne nazewnictwo poszczególnych elementów. Dzięki temu aplikacje są łatwiejsze do zrozumienia, jednak równocześnie oznacza to, że wbudowane narzędzia Rails będą rozumieć, jak działa Twoja aplikacja. Dlaczego jest to tak istotne? Skoro narzędzia wiedzą, jaką strukturę ma aplikacja, można ich użyć do zautomatyzowania wielu zadań programistycznych. W ten sposób Rails może wykorzystać konwencje do wygenerowania dla Ciebie kodu bez konieczności konfiguracji aplikacji. Innymi słowy, Rails przedkłada konwencję nad konfigurację. Przyjrzyjmy się jednemu z narzędzi Rails o największych możliwościach — rusztowaniu. Nie istnieją głupie pytania P: Ciągle piszecie o „Ruby” albo o „Rails”. Jaka jest między nimi różnica? O: Ruby to język programowania. Rails to zbiór skryptów języka Ruby. Dlatego serwer WWW, platforma aplikacji ActionPack, a także wbudowane skrypty narzędzi to wszystko skrypty języka Ruby, które są jednocześnie częścią Rails. P: W jaki sposób mogę zmodyfikować stronę główną mojej nowej witryny? O: Zerknij do kodu HTML znajdującego się w pliku index.html w katalogu public aplikacji. Katalog public zawiera całą statyczną zawartość aplikacji. P: A co jeśli chcę użyć innego serwera WWW? Czy mogę to zrobić? O: W czasie tworzenia aplikacji używanie wbudowanego serwera WWW ma sens. Jeśli jednak chcesz wdrożyć gotową wersję aplikacji na innym serwerze WWW, możesz to zrobić. P: Czy ma znaczenie, w którym folderze jestem, kiedy wykonuję polecenie ruby script/server? O: Oczywiście, że tak. Musisz znajdować się w folderze zawierającym aplikację. P: Co kompiluje mój kod? O: Ruby jest językiem interpretowanym, jak JavaScript. Oznacza to, że kompilacja nie jest potrzebna. Możesz po prostu zmienić kod i natychmiast go wykonać. jesteś tutaj 41 Generowanie kodu Rusztowanie to kod GENEROWANY Co zatem musi zrobić nasza aplikacja? Spójrzmy jeszcze raz do wiadomości od przyjaciela: To ten sam e-mail co wcześniej. Hej — jak się masz? Potrzebna mi *wielka* przysługa! Pamiętasz tę aplikację do sprzedaży biletów, nad którą — jak mówiłem — pracowaliśmy? Nie wygląda to za dobrze. Siedzimy nad tym od tygodni! Nasz zespół naprawdę sobie nie radzi. Czy myślisz, że mógłbyś utworzyć tę aplikację dla nas? Potrzebna nam strona internetowa, która jest w stanie: A p l i k a c j a m u s i w y k o n y w a ć w s z y s t k i e t e o p e r a c j e . M u s i b y ć w s t a n i e t w o r z y ć , o d c z y t y w a ć , u a k t u a l n i a ć i u s u w a ć d a n e . wyświetlić wszystkie sprzedane bilety, utworzyć ( wczytać ( uaktualnić ( usunąć ( Create)nową transakcję sprzedaży biletu, Read) i wyświetlić pojedynczy bilet, Update) szczegóły sprzedaży, Delete) transakcję sprzedaży biletu. • • • • • Wiem — wydaje się, że to gigantyczna liczba funkcji, ale szef mówi, że to minimum opcji, jakich potrzebują; dobrze wiesz, że z tym facetem trudno się kłócić! A oto struktura danych: Ticket (bilet): name — imię i nazwisko kupującego (łańcuch znaków) seat_id_seq — numer miejsca, na przykład E14 (łańcuch znaków) address — adres kupującego (długi łańcuch znaków) price_paid — cena sprzedaży biletu (liczba dziesiętna) email_address — adres e-mail kupującego (łańcuch znaków) Załączam szkice stron internetowych, żebyś wiedział, do czego zmierzamy. Eeee, potrzebujemy tego na poniedziałek, inaczej polecę ze stołka. Pomocy! Operacje te muszą działać na tej strukturze danych biletu. Musimy zatem utworzyć strony internetowe, które pozwolą nam tworzyć (Create), odczytywać (Read), uaktualniać (Update) i usuwać (Delete) bilety. Ponieważ pierwsze litery tych operacji w języku angielskim to C, R, U i D, są one znane jako operacje CRUD. W aplikacjach opartych na bazach danych operacje te wykonywane są stosunkowo często — tak często, że Rails udostępnia sposoby szybkiego generowania całego kodu i wszystkich stron, jakie będą potrzebne. Wszystko to wykonywane jest za pomocą rusztowania (ang. scaffolding). 42 Rozdział 1. Magnesiki z kodem Istnieje proste polecenie, które można wydać w konsoli w celu wygenerowania kodu rusztowania. Zobacz, czy będziesz w stanie ułożyć magnesiki tak, by uzupełnić to polecenie. Początki ruby script/generate ticket name: : : : : seat_id_seq string scaffold string text string price_paid decimal address email_address jesteś tutaj 43 Polecenie scaffold tworzy kod Magnesiki z kodem: Rozwiązanie Istnieje proste polecenie, które można wydać w konsoli w celu wygenerowania kodu rusztowania. Zobacz, czy będziesz w stanie ułożyć magnesiki tak, by uzupełnić to polecenie. „scaffold” to polecenie wykorzystywane do generowania kodu operacji CRUD. ruby script/generate scaffold ticket name: string seat_id_seq price_paid string : : address email_address decimal : : Typ „decimal” to dowolna liczba zawierająca znak dziesiętny. Co zatem robi polecenie scaffold? text string : : : Typ „text” wykorzystywany jest dla dłuższych łańcuchów znaków. Pamiętaj: to polecenie należy wprowadzić, kiedy będziesz w katalogu „tickets”. Polecenie scaffold tworzy kod, który pozwala użytkownikowi tworzyć, odczytywać, uaktualniać oraz usuwać dane z bazy. Kiedy masz aplikację opartą na bazie danych, która potrzebuje tworzyć, odczytywać, uaktualniać i usuwać dane z bazy, rusztowanie może oszczędzić Ci sporo czasu i wysiłku. Wpisz polecenie scaffold dla tabeli ticket do konsoli i zobacz, co się stanie: Zrób tak! Plik Edycja Okno Pomoc ruby script/generate scaffold ticket name:string seat_id_seq:string address:text price_paid:decimal email_address:string 44 Rozdział 1. Początki Jazda próbna Teraz pora sprawdzić, czy aplikacja naprawdę działa. By zobaczyć nową stronę z biletami, wpisz w przeglądarce adres: http://localhost:3000/tickets Odpowiada to nazwie podanej w poleceniu „scaffold”. Widzisz, jak platforma Rails sama zrobiła z tego liczbę mnogą? H m … t o z d e c y d o w a n i e n i e w y g l ą d a d o b r z e . Co zatem poszło nie tak? Pomimo że kod rusztowania został wygenerowany poprawnie, serwer WWW wyświetla błąd. Wszystko, co otrzymujemy, to komunikaty o błędach. WYSIL SZARE KOMÓRKI Zastanów się nad komunikatem o błędzie widocznym w przeglądarce. Jak myślisz, dlaczego aplikacja nie działa? jesteś tutaj 45 Tworzenie tabel za pomocą migracji W bazie danych nie ma jeszcze tabel! Aplikacja powinna wyświetlić pustą listę sprzedanych biletów, ale tak nie zrobiła. Dlaczego nie? Powinna była wczytać listę z tabeli bazy danych o nazwie tickets, jednak nie utworzyliśmy jeszcze żadnych tabel. Czy powinniśmy połączyć się z bazą danych i utworzyć tabelę? W końcu baza danych znajduje się tu, w aplikacji. Ale właściwie dlaczego mamy to robić? Przecież przekazaliśmy Rails wystarczająco dużo informacji, by platforma ta utworzyła tabelę za nas. Spójrzmy raz jeszcze na polecenie scaffold: Uwaga: rusztowanie nosi nazwę „ticket” (liczba pojedyncza), natomiast tabela będzie się nazywała „tickets” (liczba mnoga). Plik Edycja Okno Pomoc ruby script/generate scaffold ticket name:string seat_id_seq:string address:text price_paid:decimal email_address:string tickets name seat_id_seq address price_paid email_address string string text decimal string Zasada Rails: Nie powtarzaj się Znajomi programiści mogą nazywać tę zasadę „DRY”, od pierwszych liter jej angielskiego odpowiednika („Don t Repeat Yourself”). Kiedy wykonywaliśmy polecenie scaffold, przekazaliśmy Rails wystarczającą ilość informacji dotyczących struktury danych, a w Rails istnieje ważna zasada: Nie powtarzaj się. Jeśli powiesz coś Rails raz, nie powinieneś musieć tego powtarzać. Jak zatem zmusić Rails do utworzenia tabeli? Ciekawostki Rails ma wbudowaną bazę danych SQLite3. Gdzie ona zatem jest? Baza danych znajduje się w folderze db, w pliku development.sqlite3. 46 Rozdział 1. Tabelę tworzy się dzięki wykonaniu migracji Kiedy platforma Rails wygenerowała rusztowanie, utworzyła również niewielki skrypt w języku Ruby, noszący nazwę migracja (ang. migration) i służący do tworzenia tabeli. Migracja to skrypt zmieniający strukturę dołączonej bazy danych. Zajrzyj do folderu db/migrate. Powinieneś znaleźć tam plik o nazwie data_i_czas _create_tickets.rb, gdzie data_i_czas to data i czas UTC utworzenia pliku. Jeśli otworzysz ten plik w edytorze tekstu, powinien on wyglądać mniej więcej następująco: class CreateTickets ActiveRecord::Migration def self.up create_table :tickets do |t| t.string :name t.string :seat_id_seq t.text :address t.decimal :price_paid t.string :email_address t.timestamps end end def self.down drop_table :tickets end end Oto zawartość pliku migracji. Migracja to niewielki skrypt języka Ruby. Zamiast wykonywać ten skrypt bezpośrednio, należy go wykonać za pomocą innego narzędzia Rails, o nazwie rake. By wykonać migrację, należy wpisać rake db:migrate w wierszu poleceń. Poniższe polecenie wykonuje kod migracji i tworzy tabelę: Plik Edycja Okno Pomoc rake db:migrate Początki db migrate data_i_czas _create_tickets.rb Nazwa pliku tworzonego przez Rails zawiera datę i czas UTC, kiedy plik był wygenerowany. Nie martw się, niebawem powiemy więcej na ten temat. Rails wykorzystuje notację CamelCase w przypadku U w a g a ! klas, a notację ze znakiem „_” dla nazw plików. Dlatego właśnie migracja nosi nazwę „CreateTickets” i znajduje się w pliku o nazwie „…_create_tickets.rb”. WYTĘŻ UMYSŁ Dlaczego migracja zawiera w nazwie datę i czas? jesteś tutaj 47 Witamy w Twoim nowym systemie Jazda próbna Upewnij się, że utworzyłeś tabelę tickets za pomocą polecenia rake. Teraz wróć do przeglądarki i odśwież stronę: http://localhost:3000/tickets Twoja aplikacja internetowa działa! W kilka minut możesz utworzyć kilka testowych rekordów: Oto kilka rekordów, jakie dodaliśmy. Ty też dodaj kilka! 48 Rozdział 1. Czekaj! To niemożliwe! Wpisaliśmy kilka poleceń do konsoli i to spowodowało utworzenie całej aplikacji? Tak — zbudowaliśmy o wiele więcej niż tylko stronę główną. Zbudowaliśmy cały system. Rusztowanie wygenerowało cały zbiór stron, które pozwalają użytkownikom tworzyć, modyfikować i usuwać informacje dotyczące biletów. By zobaczyć, jak działa cała aplikacja, utworzymy i zmodyfikujemy kolejny rekord. Po przesłaniu formularza będziesz w stanie wczytać nowy bilet z bazy danych i wyświetlić go. Kliknięcie łącza „Back” przeglądarki przenosi Cię z powrotem na stronę główną… Początki Kliknięcie odnośnika „New ticket” na stronie internetowej przeniesie Cię do formularza, w którym możesz utworzyć nowy bilet. Przycisk „Edit” na stronie wyświetlającej bilet pozwala uaktualnić dowolne informacje. …gdzie możesz wybrać bilet do usunięcia. Bum! jesteś tutaj 49 Przegląd Rails Celne spostrzeżenia ¢ Polecenie rails nazwa aplikacji generuje dla Ciebie aplikację znajdującą się w folderze nazwa aplikacji . Rails tworzy również foldery oraz pliki stanowiące podstawową strukturę aplikacji. Rails zawiera wbudowany serwer WWW. By go uruchomić, należy użyć polecenia: ruby script/server Domyślna strona główna znajduje się pod adresem: http://localhost:3000/ Aplikacje Rails są zgodne z zasadą: „Konwencja ważniejsza od konfiguracji”. Operacje tworzenia, odczytywania, uaktualniania ¢ ¢ ¢ ¢ ¢ ¢ ¢ i usuwania wykonywane na bazie danych znane są pod nazwą operacji CRUD. Rusztowanie tworzy dla Ciebie kod CRUD. By utworzyć rusztowanie dla obiektu thing, należy wykonać: ruby script/generate scaffold thing nazwa kolumny 1 : typ kolumny 1 nazwa kolumny 2 : typ kolumny 2 ... By zobaczyć rusztowanie, należy wybrać w przeglądarce adres: http://localhost:3000/things Aplikacje Rails są zgodne z zasadą: „Nie powtarzaj się”. Migracja to skrypt zmieniający strukturę dołączonej bazy danych. Migrację wykonuje się za pomocą polecenia: rake db:migrate Nie istnieją głupie pytania P: Niektóre polecenia rozpoczynają się od rails, inne od ruby, a jeszcze inne od rake. Jaka jest między nimi różnica? O: Polecenie rails wykorzystywane jest do utworzenia nowej aplikacji. Z kolei ruby to interpreter języka Ruby, który wykorzystywany jest do wykonywania skryptów narzędzi przechowywanych w folderze scripts. Polecenia ruby i rake używane są w zasadzie do wszystkich zadań w Rails. P: Czym zatem jest rake? O: rake to polecenie użyte przez nas do wykonania migracji bazy danych. Oznacza „Ruby make” i wykorzystywane jest do niektórych z tych samych zadań, do jakich w językach takich, jak C i Java służą, odpowiednio, make oraz ant. Kiedy rake otrzymuje zadanie do wykonania (na przykład migrację), jest w stanie w sprytny sposób przeanalizować aplikację i zdecydować, które skrypty ma wykonać. Jest zatem nieco sprytniejsze od ruby i wykorzystywane jest do bardziej skomplikowanych zadań, takich jak modyfikowanie struktury bazy danych czy wykonywanie testów. 50 Rozdział 1. P: Nie rozumiem zasady: „Konwencja ważniejsza od konfiguracji”. Co ona oznacza? O: Wiele języków programowania daje Ci mnóstwo opcji, z których możesz wybierać, tak jak wybierasz wyposażenie nowego samochodu. W przypadku języka z dużą liczbą dostępnych opcji konieczne jest przechowanie wyborów programisty — zazwyczaj w dużych plikach XML. Rails ma inne podejście. W Rails wszystko nazywane jest w spójny sposób i przechowywane w ustandaryzowanym miejscu. Jest to nazywane podejściem „konwencjonalnym” — nie dlatego, że jest staromodne, ale dlatego, że jest zgodne z pewnymi „konwencjami” czy „standardami”. P: Nie mogę zatem zmienić sposobu działania Rails? O: W Rails możesz zmienić właściwie wszystko, jeśli jednak będziesz przestrzegał konwencji, wkrótce zauważysz, że tworzenie aplikacji pójdzie Ci szybciej, a inne osoby uznają Twój kod za łatwiejszy do zrozumienia. Pięknie! Uratowałeś pracę kumpla! Twoje krótkie spotkanie z Rails uratowało stołek przyjaciela… przynajmniej na razie. Wygląda na to, że właśnie przyszedł kolejny e-mail: Początki Wielkie dzięki! Niesamowite jest widzieć działającą aplikację — i jeszcze wszystko poszło Ci tak szybko! Rails wygląda na fantastyczną technologię. Samo to, jak wszystko pokazuje się od razu po edycji kodu… Żadnej kompilacji. Żadnego wdrażania. To musi być super! Naprawdę uratowałeś mój stołek. Tylko jedna uwaga — podpisy dla „seat_id_seq” powinny być bardziej czytelne dla człowieka, coś w stylu „Seat #”. Myślisz, że dałoby się to zrobić? Jak zatem możemy zmienić podpisy? Platforma Rails szybko wygenerowała dla nas aplikację internetową, co oszczędziło nam wiele czasu i wysiłku. Co jednak zrobić, jeśli chcemy wprowadzić niewielkie zmiany do wyglądu wygenerowanych stron? Jak łatwe jest modyfikowanie stron wygenerowanych dla nas przez Rails? jesteś tutaj 51 Poznaj architekturę By zmodyfikować aplikację, musisz przyjrzeć się jej architekturze Rusztowanie po prostu generuje dla nas kod. Po wygenerowaniu kodu dostosowanie go do własnych potrzeb należy do Ciebie. A jeśli spojrzysz do folderu aplikacji, zobaczysz, że jest w nim mnóstwo wygenerowanego kodu, który możesz chcieć dostosować do własnych wymagań. Jeśli zatem musisz wprowadzić zmiany do aplikacji — na przykład zmodyfikować podpisy stron — od czego możesz zacząć? wygenerowała dla nas pełną strukturę folderów, a także przestrzega konwencji. Hm. Platforma Rails Zastanawiam się, czy możemy to jakoś wykorzystać w celu zmodyfikowania aplikacji? Polegaj na konwencjach Rails. Pamiętasz, jak powiedzieliśmy, że aplikacje Rails zgodne są z zasadą: „Konwencja ważniejsza od konfiguracji”? To ułatwi nam modyfikację aplikacji. Dlaczego? Ponieważ kod podzielony jest zgodnie z jego funkcją. Oznacza to, że skrypty Ruby robiące podobne rzeczy znajdują się w podobnych miejscach. Jeśli zatem potrzebujesz zmienić zachowanie aplikacji Rails, powinieneś być w stanie zidentyfikować, gdzie należy poprawić kod, a następnie go zmodyfikować. Oczywiście, żeby to jednak zrobić, musisz zrozumieć… Standardową architekturę Rails 52 Rozdział 1. Fo l d e r a p l i k a c j i z aw i e r a w i ę k s z o ś ć k o d u a p l i k a c j i . app controllers application.rb tickets_controller.rb helpers application_helper.rb tickets_helper.rb models ticket.rb views layouts tickets.html.erb tickets edit.html.erb index.html.erb new.html.erb show.html.erb Początki Trzy części Twojej aplikacji: model, widok i kontroler Prawie cały kod w aplikacjach Rails mieści się w jednej z trzech kategorii: 1 kod modelu Kod modelu (ang. model) zarządza zapisem danych do bazy oraz ich odczytem. Obiekty kodu modelu reprezentują rzeczy istniejące w domenie systemu — tak jak bilety w systemie biletów. Oznacza to po prostu problemy biznesowe, jakie aplikacja stara się rozwiązać. 2 kod widoku Widok (ang. view) to część aplikacji prezentowana użytkownikowi. Z tego powodu czasami nazywana jest również warstwą prezentacyjną. W przypadku aplikacji internetowej widok przede wszystkim generuje strony internetowe. 3 kod kontrolera Kontroler (ang. controller) to prawdziwy mózg aplikacji. Decyduje o tym, w jaki sposób użytkownik wchodzi w interakcję z systemem, kontrolując, do których danych z modelu odbywa się dostęp i które części widoku je zaprezentują.. Różne typy kodu są w aplikacji Rails połączone w następujący sposób: Widok Widok składa się ze stron internetowych, które prezentują aplikację użytkownikowi. Kontroler Kontroler to kluczowy element podejmowania decyzji. Decyduje, do których danych z modelu odbywa się dostęp, a także które części widoku te dane wyświetlą. Model Model emuluje rzeczy ze świata rzeczywistego, którymi zarządza aplikacja. W systemie sprzedaży biletów obiekty biletów żyją w modelu. jesteś tutaj 53 Cała prawda o Rails Cała prawda o Rails Wywiad tygodnia: Pytamy najbardziej pożądaną platformę internetową o to, co nią kieruje Head First: Witaj Rails, ogromnie się cieszymy, że mogłaś do nas wpaść. Rails: Cieszę się, że mogę tu być. Head First: Musiało ci być ciężko znaleźć wolną chwilę w tak napiętym terminarzu. Rails: Jasne, jestem niesamowicie zajęta. Z tymi wszystkimi połączeniami z bazą danych, logiką aplikacji i stronami, jakie muszę prezentować, nie zostaje mi zbyt wiele czasu dla siebie. Ale daję sobie jakoś radę — mam niezłych współpracowników. Head First: Zastanawiałem się nad jedną rzeczą — mam nadzieję, że się nie obrazisz… Kiedy tworzysz nową aplikację, po co jest w niej od razu tyle katalogów? Rails: Co mogę powiedzieć? Pomocna ze mnie dusza. Z czasem nauczyłam się, co ludzie chcą robić w swoich aplikacjach. Nie podoba mi się, gdy ludzie ręcznie muszą tworzyć ciągle te same rzeczy. Head First: Ale czy to nie jest nieco… no, mylące? Rails: Proszę cię. Jestem osobą przestrzegającą konwencji. Żadnych niespodzianek. Kiedy raz nauczysz się, jak ze mną współpracować, zobaczysz, że szybko się do mnie przyzwyczaisz. Head First: Słyszałem, że nie lubisz, by cię konfigurowano. Rails: Możesz mnie konfigurować w dowolny sposób, jednak większość osób woli pracować w ten sam sposób co ja. Konwencja ważniejsza od konfiguracji. Jasne? Head First: No tak — to w końcu jedna z twoich zasad, prawda? Rails: Właśnie — ta i jeszcze: „Nie powtarzaj się”. Head First: I jeszcze co? Rails: „Nie powtarzaj się”? Head First: I jeszcze co? Rails: Nie… Hej, zabawny z ciebie facet! Nie istnieją głupie pytania w kontrolerze. W dalszej części książki będziemy używali pojęć „logika modelu” oraz „logika aplikacji”, by rozróżnić te dwie sytuacje. P: Jaka jest różnica między widokiem a kontrolerem? O: Widok decyduje o tym, jak wygląda aplikacja, a kontroler decyduje o tym, jak działa. Widok definiuje zatem kolor przycisku na stronie, a także widoczny na nim tekst, natomiast kontroler decyduje, co dzieje się po naciśnięciu przycisku. P: Gdzie w mojej aplikacji powinna się znajdować logika biznesowa? O: Cóż, zależy, co rozumiesz pod tym pojęciem. Niektóre osoby definiują logikę biznesową jako reguły związane z zarządzaniem danymi. W tym przypadku logika biznesowa mieści się w modelu. Inne osoby definiują logikę biznesową jako reguły definiujące sposób działania systemu — na przykład jakie możliwości ma aplikacja i jaka jest kolejność dostępu do nich. W tym przypadku logika biznesowa mieści się 54 Rozdział 1. P: Jaki kod będę pisał najczęściej? O: To zależy od aplikacji i programisty. Jeśli zobaczysz, że najczęściej dodajesz kod do którejś z trzech części aplikacji, możesz się zastanowić, czy kolejny dodawany fragment przynależy do prezentacji, interakcji, czy też modelowania. Początki ?Jaki JeSt móJ cel? Dopasuj opis kodu do części aplikacji, z którą łączy się ten kod. Projekt kart w pasjansie internetowym. W systemie bankowości elektronicznej ten kod decyduje o tym, czy chcesz przelać pieniądze na konto, czy z konta. Obiekt „spotkanie” w aplikacji terminarza. W systemie bloga kod ten decyduje, czy komentarze mają być wyświetlone jako tabela, czy jako lista. Ten kod rejestruje ofertę w internetowym portalu aukcyjnym. Kod decyduje, że musisz się zalogować do aplikacji udostępniającej pocztę elektroniczną. Menu składające się z odnośników. Model Widok Kontroler jesteś tutaj 55 Model, widok czy kontroler? ?Jaki JeSt móJ cel? ROZWIĄZANIE Dopasuj opis kodu do części aplikacji, z którą łączy się ten kod. Projekt kart w pasjansie internetowym. W systemie bankowości elektronicznej ten kod decyduje o tym, czy chcesz przelać pieniądze na konto, czy z konta. Obiekt „spotkanie” w aplikacji terminarza. W systemie bloga kod ten decyduje, czy komentarze mają być wyświetlone jako tabela, czy jako lista. Ten kod rejestruje ofertę w internetowym portalu aukcyjnym. Kod decyduje, że musisz się zalogować do aplikacji udostępniającej pocztę elektroniczną. Menu składające się z odnośników. 56 Rozdział 1. Model Widok Kontroler Tutaj znajdują się kontrolery. Początki app controllers application.rb tickets_controller.rb helpers application_helper.rb tickets_helper.rb Trzy typy kodu przechowywane są w OSOBNYCH folderach Rails woli zatem konwencję od konfiguracji i wykorzystuje architekturę MVC (Model-View-Controller, czyli Model- Widok-Kontroler). I co z tego wynika? W jaki sposób architektura MVC pomoże nam zmienić podpisy na naszych stronach i tym samym poprawić aplikację? Przyjrzyjmy się raz jeszcze plikom wygenerowanym przez rusztowanie. Ponieważ kod jest w jasny sposób podzielony na trzy odrębne typy — model, widok oraz kontroler — Rails umieszcza każdy typ w osobnym folderze. Zaostrz ołówek Na diagramie folderów znajdującym się po prawej stronie zaznacz pliki, o których sądzisz, że trzeba je będzie zmodyfikować w celu edycji podpisów na stronach. Napisz następnie, dlaczego wybrałeś te właśnie pliki. Tu trafiają modele. Wszystkie widoki znajdują się tutaj. models ticket.rb views layouts tickets edit.html.erb index.html.erb new.html.erb show.html.erb jesteś tutaj 57 Podpisy znajdują się w widokach Zaostrz ołówek Rozwiązanie Twoje zadanie polegało na zaznaczeniu plików, które trzeba zmodyfikować w celu zmiany podpisów na stronach. Ponieważ musimy zmienić wygląd stron, musimy zmienić widoki. Pliki, które trzeba uaktualnić, znajdują się w folderze „views” i mają rozszerzenie „.html.erb”. app Podpisy na stronach możemy zmienić, modyfikując pliki „.html.erb” znajdujące się w folderze „views”. Nie musimy zmieniać żadnych plików w folderach „controllers”, „helpers” i „models”. controllers helpers models views layouts tickets edit.html.erb index.html.erb new.html.erb show.html.erb Trzeba zmodyfikować pliki WIDOKU Jeśli chcemy zmienić podpisy na stronach internetowych, musimy zmodyfikować kod widoku. Cały kod widoku znajduje się w folderze app/views. Pliki widoku generują strony internetowe i nazywane są szablonami stron. Czym zatem jest szablon strony i co zawierają te szablony? 58 Rozdział 1. Edycja kodu HTML w widoku Jak zatem naprawdę wygląda szablon strony? Otwórz cztery pliki .html.erb z folderu views/tickets za pomocą edytora tekstu. Zawartość plików wygląda w dużej mierze jak kod HTML. Chcemy zmienić podpisy dla pola seat_id_seq na Seat #. By to zrobić, odszukaj tekst „Seat id seq” we wszystkich czterech plikach, zmień go na „Seat #”, a następnie zapisz zmiany. Początki Zrób tak! To jest tekst, który musisz zmienić na „Seat #”. # p p b Name: /b p b Name: /b =h @ticket.name b Name: /b =h @ticket.name =h @ticket.name /p /p /p p p p b Seat hash;: /b b Seat id seq: /b b Seat hash;: /b =h @ticket.seat_id_seq =h @ticket.seat_id_seq =h @ticket.seat_id_seq =h @ticket.seat_id_seq /p /p p /p b Address: /b p p =h @ticket.address =h @ticket.address /p Jeśli zmodyfikujesz podpisy w kodzie HTML, zmiany będą natychmiast widoczne w przeglądarce. Jeśli teraz wprowadzisz zmiany i odświeżysz stronę w przeglądarce, będą one widoczne natychmiast. Sprawdźmy to od razu… Przejdź do każdego z czterech plików .html.erb w folderze views/tickets i zmień tekst Seat id seq na Seat #. Spowoduje to zmianę podpisów na stronach na Seat #. stronach na Seat #. h1 Editing ticket /h1 form_for(@ticket) do |f| = f.error_messages Nie zapomnij dodać cudzysłowów — ponieważ teraz jest to łańcuch znaków. p = f.label :name br / = f.text_field :name /p p = f.label :seat_id_seq br / = f.text_field :seat_id_seq “Seat # /p Ten symbol trzeba będzie zmienić na łańcuch znaków „Seat #”. Nie istnieją głupie pytania P: Nazywacie :seat_id_seq symbolem. Czym jest symbol? O: Symbol nieco przypomina łańcuch znaków. Łańcuch znaków otoczony jest cudzysłowem, natomiast symbol zawsze rozpoczyna się od dwukropka (:). Symbole wykorzystywane są zazwyczaj w Rails do nazywania różnych rzeczy, ponieważ są nieco bardziej wydajne pod względem pamięci. W większości przypadków symbole i łańcuchy znaków mogą być wykorzystywane wymiennie. jesteś tutaj 59 Zmień teraz, zobacz teraz Jazda próbna Odśwież stronę znajdującą się pod adresem: http://localhost:3000/tickets/ Teraz wszystkie podpisy brzmią „Seat #”. Dokładnie tego chcieliśmy. Czy zauważyłeś, jak szybko zmiana pokazała się w aplikacji? To dzięki temu, że platforma Rails zbudowana jest w języku Ruby, a kod w tym języku nie musi być kompilowany. Serwer WWW Rails może po prostu wykonać uaktualniony kod źródłowy. Czy ma to jednak jakieś znaczenie? Owszem, by wypróbować zmodyfikowany kod, musisz wykonać o wiele mniej kroków. Nie trzeba na przykład kompilować kodu ani łączyć go w pakiety i gdzieś wdrażać. Wystarczy tylko napisać kod i wykonać go. Cykl programowania w Rails jest bardzo szybki, a wprowadzenie zmian do aplikacji odbywa się równie prędko. C y k l p r o g r a m o w a n i a N a p i s a n i e / p o p r a w i e n i e k o d u K o m p i l a c j a k o d u U t w o r z e n i e p a k i e t u W d r o ż e n i e a p l i k a c j i U r u c h o m i e n i e j e j P o w t ó r z e n i e Te kroki są zbędne, kiedy programujesz w Rails. 60 Rozdział 1. Niedziela, godzina 8 rano Wprowadziłeś dwie poprawki, ale teraz dzwoni telefon… Co u licha? Początki że powinieneś wiedzieć, iż zadzwonił do mnie szef i chciał się dowiedzieć, gdzie mieszkasz. Bardzo chciał zobaczyć całą tę robotę, jaką wykonałeś, ale ciągle się trochę martwi, że może ona nie być gotowa na jutro rano, więc jeszcze dziś chciał sprawdzić co i jak. Dziękuję za całą pracę, jaką wykonałeś. A przy okazji — mówiłem Ci już, Hej, stary! Fantastycznie, że aplikacja działa tak świetnie. Ale słuchaj… Myślę, że szef chciałby, by dla każdego zamówienia biletu obok adresu e-mail odnotowany był również numer telefonu? Przepraszam — musiało mi to umknąć. PUK! PUK! jesteś tutaj 61 A więc to Ty jesteś odpowiedzialny za tę nową aplikację! Rezerwacje biletów tak jest… na pierwszy koncert powinny być dostępne za mniej niż 24 godziny, więc lepiej, żeby aplikacja działała, bo jak nie, to ja będę chciał się dowiedzieć, dlaczego Mam na Ciebie haka 62 Rozdział 1. Aplikacja musi teraz przechować większą liczbę informacji Wszystko było właściwie skończone do momentu, gdy Twój przyjaciel wspomniał, że należy zapisywać numery telefonów. Potrzebujemy więcej danych, a co to oznacza dla naszej aplikacji? Początki 1 2 Potrzebnenamdodatkowepolewyświetlane nakażdejstronie. Na szczęście wiemy, jak ulepszać szablony stron, więc nie powinno to stanowić problemu. http://localhost:3000/tickets/ Tickets: index Musimy dodać takie dodatkowe pole do strony. Musimyprzechowaćdodatkowąkolumnę w bazie danych. Musimy przechować dodatkową kolumnę w naszej bazie danych, jednak jak to zrobić? Musimy dodać kolumnę „phone” do tabeli „tickets”. tickets name seat_id_seq address price_paid email_address phone string string text decimal string string Zaostrz ołówek Potrzebujemy dodać kolumnę do tabeli bazy danych. Napisz poniżej, jaki typ skryptu wykorzystywaliśmy wcześniej w celu modyfikacji struktury bazy danych. jesteś tutaj 63 Migracje zmieniają bazy danych Zaostrz ołówek Rozwiązanie Miałeś napisać, jaki typ skryptu wykorzystywaliśmy wcześniej w celu modyfikacji struktury bazy danych. Migracja Migracja to po prostu skrypt w języku Ruby Aby dodać kolumnę do tabeli, potrzebna nam migracja. Ale czym tak naprawdę jest migracja? Przyjrzyjmy się tej, która utworzyła naszą tabelę z biletami. class CreateTickets ActiveRecord::Migration def self.up create_table :tickets do |t| t.string :name t.string :seat_id_seq t.text :address t.decimal :price_paid t.string :email_address t.timestamps end end def self.down drop_table :tickets end end Musimy utworzyć kod przypominający ten, jednak zamiast tworzenia tabeli nasza migracja musi dodać kolumnę. Halo? Jak niby mamy napisać kod modyfikujący tabelę? Nie wiemy, jak to zrobić! Musimy UTWORZYĆ kod, ale to nie znaczy, że musimy NAPISAĆ kod. 64 Rozdział 1. Początki P: Część kodu migracji wygląda tak, jakby usuwała tabelę. Dlaczego tak jest? O: Migracje mogą zrobić o wiele więcej, niż pokazujemy tutaj. Każda migracja może na przykład odwrócić wprowadzone przez siebie zmiany. Z tego powodu kod tworzący nową tabelę jest połączony z kodem mogącym tę tabelę usunąć. Nie musisz teraz wiedzieć więcej na ten temat. P: Nie muszę rozumieć kodu? Czy żeby posługiwać się Rails nie należy rozumieć kodu w języku Ruby? O: Im lepiej będziesz rozumiał Ruby, tym większą kontrolę będziesz miał nad Rails. W miarę lektury książki będziesz się dowiadywał coraz więcej o języku Ruby. Nie istnieją głupie pytania P: Jeśli migracja to tylko skrypt w języku Ruby, dlaczego muszę używać rake? Czemu nie mogę po prostu wykonać skryptu? O: Dobre pytanie. Część Ruby zaprojektowana została tak, by bezpośrednio wykonać kod, a część nie. Migracji nie należy wykonywać w sposób bezpośredni. Powinny one być wykonywane za pomocą rake.
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Head First Ruby on Rails. Edycja polska
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: