W tym tutorialu dowiesz się jak rozpocząć pracę z programem RadRails. Tutorial ten jest dość szczegółowy, by nawet osoba pierwszy raz stykająca się z tego rodzaju programem nie miała większych problemów ze zrozumieniem.
Program RadRails trzeba poznać swoją drogą, ale to przy okazji. Głównym naszym celem jest napisanie aplikacji. Naszą pierwszą aplikacją webową będzie notes, w którym będziemy zapisywać, edytować i usuwać notki. A pojedyncza notka będzie składać się z tytułu i treści. Proste? To do dzieła!
Przy pierwszym uruchomieniu może się pojawić okienko jak poniżej, pytające o folder, w którym będziemy trzymać nasze projekty. Proponuję zostawić domyślną ścieżkę C:\Rails_project i zaznaczyć checkbox (Use this as the default and do not ask again), by przy kolejnych uruchomieniach nie pytał nas o to.
Po kliknięciu OK, powinien na dysku C: pojawić się katalog Rails_project.
Pojawiło się nam okno RadRails z róznymi panelami. Nie będę w tym kroku omawiał poszczególnych paneli, gdyż wraz z ich używaniem poznamy ich zastosowanie. Standardowe ułożenie paneli pokazano na poniższym rysunku. Do wszystkich paneli możemy także dotrzeć poprzez menu, wybierając Window->Show View a następnie panel, na którym chcemy pracować.
By uwtorzyć nowy projekt wybierz z menu File->New.... Następnie
z rozwijanego drzewa w okienku New wybierz Rails Project.
Zamiast szukać możesz także w miejscu do wpisania tekstu wpisać rails
- powinna zostać tylko szukana przez nas opcja.
Na przyszłość, by zaoszczędzić sobie klikania, warto wiedzieć, że ten sam rezultat można uzyskać także w inny sposób, rozwijając listę przy ikonie nowego projektu i wybierając Rails Project.
W oknie New Rails project w nazwie projektu (Project name) wpisz projekt1 i naciśnij Finish (projekt zostanie utworzony w domyślnej lokalizacji C:/Rails_project/projekt1).
W panelu Rails Navigator (po lewej stronie, jesli go nie widzisz wybierz z menu Window->Show View->Rails Navigator) pojawił się nasz projekt, rozwiń go klikając na nim dwa razy.
Utworzyła nam się cała struktura katalogów, w których pogrupowane będą
pliki naszej aplikacji w zależności od ich funkcji. Najważniejsze katalogi
przedstawia poniższa tabela:
| app | pliki źródłowe naszej aplikacji |
| config | pliki konfiguracyjne |
| db | pliki związane z bazą danych |
| lib | pliki bibliotek |
| log | pliki logów |
| public | pliki javascript, css, obrazki |
| vendor | pliki pluginów |
Przejdź do panelu Servers (kliknij dolny panel - domyślnie pierwsza zakładka albo Window->Show views->Servers).
Jak widzisz serwer został utworzony, jego Status jednak jest Stopped (serwer jest zatrzymany), należy go zatem uruchomić, do czego służy zielony przycisk z opisem Start. Zaznacz serwer projekt1Serveri kliknij zielony przycisk Start, serwer zacznie się uruchamiać. Może to chwilę potrwać, w tym czasie na dolnym pasku stanu będzie wyświetlany napis Starting server. Po uruchomieniu Status zmieni się na Started.
Teraz chwila prawdy... w dowolnej przeglądarce internetowej wpisz adres: http://localhost:3000/
Powinna się pojawić strona Ruby on Rails: Welcome aboard (czyli po polsku: Witamy na pokładzie). Jeśli nie udało się nawiązać połączenia i strona nie została wyświetlona, sprawdź w zakładce Servers, czy serwer został już uruchomiony (Status: Started), czy port który został wpisany po localhost (u nas 3000) jest zgodny z portem na którym uruchomiliśmy serwer (Port: 3000), jeśli nie, to po localhost wpisz port na którym został uruchomiony serwer. Jeśli i to nie pomogło, przejdź do strony pomocy: Co gdy nie działa localhost?
Zgodnie z tym, co jest po angielsku napisane na wyświetlonej stronie, na początek utworzymy bazę danych, a następnie zajmiemy się modelami i kontrolerami. Mam nadzieję, że masz zainstalowaną bazę MySQL, jeśli nie, pobierz ją i zainstaluj.
Następnie w Windowsach wybierz Start->Uruchom... wpisz w okienku: cmd i kliknij OK. W linii poleceń wpisz: mysql -u root, na początku linii powinien pojawić się napis: mysql>
Utwórz nową bazę o nazwie projekt1_development poleceniem:
mysql> create database projekt1_development;
Następnie pokaż istniejące bazy danych poleceniem:
mysql> show databases;
Wśród nich powinna być nowo utworzona baza: projekt1_development.
Okienko to możesz pozostawić otwarte, przyda się w dalszej części tutorialu.
W panelu Rails Navigator (Window->Show View->Rails Navigator) rozwiń projekt1->config i kliknij dwukrotnie database.yml.
W środkowym panelu powinna wyświetlić się zawartość pliku database.yml.
Tutaj znajdują się ustawienia połączenia z bazą danych, a zatem nazwa
hosta (host), nazwa użytkownika (username) i jego hasło(password).
Ponieważ pracujemy u siebie (na localhoście) te dane pozostawimy bez zmian.
W pliku tym znajduje się także nazwa bazy (database).
Domyślną nazwą jest nazwaprojektu_development, czyli u nas projekt1_development
(ha! przecież taką utworzyliśmy w kroku 8!).
Można by pomyśleć, że RadRails pobrał nazwę z bazy danych, tak się jednak nie stało. Skoro domyślną nazwą dla każdego projektu jest nazwaprojektu_development, autor tego tutorialu chcąc zmniejszyć sobie nakład pracy, po prostu tak a nie inaczej nazwał bazę. A zatem gdybyśmy w kroku 8 utworzyli bazę o nazwie abc, w pliku database.yml i tak widniałaby nazwa projekt1_development. Wtedy należałoby ją zmienić na abc.
Stworzymy pierwszy plik migracji. Co to takiego? Taki mechanizm pozwalający
na zmiany struktury bazy danych z poziomu railsów, zmiany te co najważniejsze
(jeśli dobrze zaimplementowane) są odwracalne.
Co być może także ważne dla ciebie używania migracji nie jest konieczna
znajomość SQLa, a stworzoną migrację można uruchomić dla różnych typów
baz
danych, zatem nie musimy się martwić jak zrealizować daną rzecz na
konkretnej bazie danych.
Ale bierzmy się do pracy. W panelu gdzie znajduje się zakładka Servers wybierz tym razem Generators (albo Window->Show view->Other... i następnie wybierz z drzewa Rails->Generators).
W polu wyboru znajdź i zaznacz migration, zaznacz opcję Create, a w polu tekstowym obok wpisz stworz_notke i kliknij Go.
W panelu Rails Navigator powinien pojawić się nowy plik. Przejdź do niego: projekt1->db->migrate->001_stworz_notke.rb. Kliknij na nim dwa razy, by go wyedytować. Powinien otworzyć się w środkowym panelu plik 001_stworz_notke.rb następującej treści:
No pięknie, ledwie stworzyliśmy plik, a on już zawiera jakieś śmieci?! No niezupełnie. Jeśli wiesz co nie co o programowaniu obiektowym to od razu zauważysz, że mamy zdefiniowaną klasę. Jeśli nie wiesz o czym mowa, uwierz autorowi tego tutoriala na słowo, że tam powyżej zdefiniowana jest klasa. Klasa ta zawiera definicję dwóch metod (to takie funkcje, które wykonują zlecone im zadania). Pierwsza (self.up) zostanie wywołana, gdy wywołamy naszą migrację, a druga (self.down) zostanie wywołana, gdy będziemy chcieli cofnąć naszą migrację i przywrócić strukturę bazy danych do stanu sprzed jej wywołania.
Edytuj treść pliku migracji, tak by wyglądał następująco (na jaśniejszym tle wiersze, które należy dodać):
Super, ale co my w ogóle zrobiliśmy? Omówmy wiersze po kolei:
| create_table "notki" do |t| | tworzy tabelę o nazwie notki z kolumnami (t) zdefiniowanymi poniżej |
| t.column "tytul", :string | tworzy kolumnę o nazwie tytuł i ma on być krótkim tekstem (:string) |
| t.column "tresc", :text | tworzy kolumnę o nazwie tresc i ma ona być dłuższym tekstem (:text) |
| end | kończy definiowanie tabeli |
| drop_table "notki" | usuwa tabelę o nazwie notki |
Obok zakładki Server powinna być zakładka Rake Tasks, otwórz ją.
Powinna pojawić się nam rozwijana lista zadań, jak na rysunku powyżej. Najprawdopodobniej jednak pojawi się informacja, iż wymagana jest konfiguracja. Bo przecież dopiero co zainstalowaliśmy RadRailsy.
Należy zatem skonfigurować RadRailsy następująco. Wybierz Window->Preferences->Rails->Configuration i podaj ścieżkę do plików rails i rake. Są one tam, gdzie instalowałeś Ruby (nie RadRails tylko Ruby!).
Dla domyślnego przypadku (ścieżka C:\ruby\) obecnej wersji Ruby będzie
to:
Rails Path: C:\ruby\bin\rails
Rake Path: C:\ruby\lib\ruby\gems\1.8\gems\rake-0.7.1\bin\rake
Następnie kliknij Apply, by wprowadzić zmiany i zamknij okno klikając OK.
Teraz powinna już być widoczna rozwijana lista wyboru z zadaniami. Jeśli lista jest pusta musisz odświeżyć widok. Kliknij ikonkę z dwoma żółtymi (a może złotymi) strzałkami i poczekaj. W pasku stanu powinien wyświetlić się napis o ładowaniu listy zadań. Teraz wszystko powinno być jak należy. Wybierz zadanie migracji twojej bazy danych zaznaczając db:migrate, następne pole pozostaw puste (tu można będzie wybrać wersję migracji, którą wykonać, gdyby na przykład kolejna zmiana dokonana w strukturze bazy danych nie była przemyślana i należałoby wrócić do poprzedniego stanu), a następnie kliknij Go.
Jeśli w zakładce Console nie było żadnego napisu error itp. nasza migracja zapewne wykonała się poprawnie. Jeśli w to wierzysz i nie chcesz zawracać sobie głowy oglądaniem bazy danych możesz przejść do kolejnego kroku. Niedowiarków zaś zachęcam do zapoznania się z plikiem schema.rb (otwórz go z Rails Navigatora wybierając projekt1->db->schema.rb). Znajdziesz w nim aktualny numer wersji migracji, które zostały wykonane (w naszym przypadku powinno być :version => 1).
Nadal nie wierzysz, że coś się zmieniło? Przejdź do okienka bazy danych (tego, które otworzyliśmy w kroku ósmym. Jeśli przypadkiem zamknąłeś to otwórz tak jak w kroku ósmym, aby widzieć znak zachęty: mysql>
W naszej bazie po migracji powinna pojawić się tabela notki. Obejrzyjmy więc jak ona wygląda.
Najpierw wybierzmy bazę, którą chcemy oglądać:
mysql> use projekt1_development;
Powinna pojawić się informacja, iż baza została wybrana (Database
changed).
Obejrzyjmy tabelę notki:
mysql> show tables;
Polecenie to powinno wymienić nazwy dwóch tabel w naszej bazie: notki
oraz schema_info. Wyświetlmy tabelę schema_info poleceniem:
mysql> select * from schema_info;
Powinniśmy otrzymać aktualny numer migracji. Obejrzyjmy strukturę tabeli
notki:
mysql> show columns from notki;
I powinniśmy zobaczyć, że tabela notki zawiera 3 kolumny: tytul
i tresc, które sami kazaliśmy utworzyć w kroku 12 oraz utworzoną
przez railsy kolumnę id, która będzie identyfikować poszczególne
notki w bazie danych (czyli ściślej mówiąc będzie kluczem głównym tabeli
notki).
Mamy bazę danych z tabelą notki, ale nie mamy jej obsługi, musimy więc ją zrobić, tak by móc notki dodawać, edytować, usuwać, listować itd. Dużo tego... ale nie jesteśmy sami i jak się zaraz okaże wszystko wykonają za nas Railsy. Posłuży nam do tego komenda generate scaffold (w dosłownym tłumaczeniu generująca rusztowanie), która zbuduje nam gotowy szkielet do obsługi tabeli notki.
I tutaj pojawia się pewna różnica jeśli chodzi o polskie nazwy. Mianowicie scaffold opiera się o angielskie nazwy, gdzie liczbę mnogą tworzy się poprzez dodanie na końcu litery 's' np. book -> books. W naszym przypadku, gdybyśmy chcieli wygenerować szkielet obsługi dla typu notka, scaffold szukałby w bazie danych kolumny notkas związanej z naszym typem notka. Musimy zatem wprowadzić wyjątek (czasem myślę, że język polski składa się z samych wyjątków), nie będzie to wyjątek w sensie informatycznym, lecz zwyczajny potocznie rozumiany wyjątek (taki jak z powiedzenia, że potwierdza regułę).
W pliku config/enviroment.rb trzeba edytować trzy wiersze. Mam nadzieję, że już kojarzysz jak otworzyć ten plik do edycji (użyj Rails Navigatora). W pliku tym w wierszach 46, 49 i 51 musimy wykasować znak "#" (hash) znajdujący się na początku każdego wiersza oraz edytować wiersz 49 jak we fragmencie kodu poniżej:
Hash na początku wiersza oznacza komentarz, usuwając go sprawiamy, iż Railsy będą brały pod uwagę to, co w tych wierszach jest zapisane. W ten sposób poinformowaliśmy Railsy, żeby interpretowały wyjątki liczby mnogiej, w szczególności u nas: liczba mnoga od słowa notka to notki.
Teraz już możemy spokojnie tworzyć szkielet. Podobnie jak w kroku 10 przechodzimy do zakładki Generators, tym razem z listy rozwijanej wybieramy scaffold (opcję Create pozostawiamy zaznaczoną), a obok wpisujemy nazwę: notka i klikamy Go.

Aby zobaczyć co nam powstało rozwiń katalog app w Rails Navigatorze. Powstała nam cała masa plików, które będziemy omawiać pojedynczo, wtedy gdy będą nam potrzebne w tym lub kolejnych tutorialach. Ale to, że powstało dużo plików niewiele nam pomogło w obsłudze bazy... czy na pewno?
Wpisz w przeglądarce adres jak poprzednio, z tą różnicą, że dodaj po nim nazwę naszej tabeli w bazie (a zatem: http://localhost:3000/notki/).
Pojawił nam się Listing tabeli notki (niewiele nam wyświetliło, bo nic jeszcze w niej nie mamy). Kliknij na link New notka, by dodać nową notkę. Wpisz tytuł Pierwsza notka, wpisz jakąś treść, a następnie kliknij Create. Jeśli wszystko odbyło się zgodnie z planem u góry powinien pojawić się zielony napis Notka was successfully created. Jest to flash (dosł. rozbłysk, mignięcie), na potrzeby tego tutoriala nazwijmy to po polsku: flesz. Jest to po prostu krótka informacja, która ukazuje się po konkretnej akcji, w celu poinformowania użytkownika co właśnie zrobił :) Dodaj jeszcze jedną lub dwie notki.
W chwili obecnej na stronie pojawiły nam się przy notkach kolejno linki: Show, Edit i Destroy. Pierwszy pokazuje nam na stronie pojedynczą notkę, drugi umożliwia jej edycję, a trzeci usuwa notkę. Nie jest to jednak takie bezpośrednie usuwanie - sprawdź klikając Destroy. Pojawi się okienko z zapytaniem, czy na pewno chcesz usunąć tę notkę. Jeśli tak - kliknij OK, jeśli nie - kliknij Anuluj.
Tutorial ten powstał m.in. ze względu na brak tutoriali z RadRailsów w języku polskim. Skoro tak, wydaje się słusznym zrobienie spolszczenia naszej aplikacji. Jeśli jeszcze nie istnieją moduły obsługi języków w Ruby, zapewne powstaną, póki co mamy niewielką aplikację, możemy ręcznie poedytować pliki, choć wymaga to chyba największego nakładu pracy w całym tym tutorialu. Oczywiście ten punkt możesz spokojnie ominąć jeśli tworzysz stronę po angielsku. Natomiast jeśli chcesz, by twój serwis był w języku polskim, należy zadbać o komunikację z użytkownikiem w języku polskim. W tym celu w pliku app/controllers/notki_controller.rb zmień tekst w wierszach 26 i 40 z:
W kolejnych plikach z folderu app/views/notki/ edytuj następujące
wiersze:
| _form.rhtml | 4, 7 (dodaj polskie znaki) |
| edit.rhtml | 1, 5, 8, 9 (jak na rysunku poniżej) |
| Spolszczenia wymagają też nazwy w następujących plikach: | |
| list.rhtml | 1, 15-17, 22, 23, 27 |
| new.rhtml | 1, 5, 8 |
| show.rhtml | 7, 8 |
A teraz sprawdź w przeglądarce jak wygląda nasza aplikacja.
Czyżby wcięło polskie znaki? No przecież! Nie ustawialiśmy kodowania.
Zatem kliknij prawym klawiszem myszy na naszym projekcie w Rails Nawigatorze
i z menu kontekstowego wybierz Properties.
W oknie dialogowym w polu Text file encoding z listy rozwijanej wybierz UTF-8, następnie wprowadź zmiany klikając Apply i kliknij OK.
Wróćmy teraz do przeglądarki i zobaczmy efekt:
Udało się! Mamy polskie znaki w notkach i linkach, brakuje ich tylko w nazwach kolumn, a to dlatego, że dane te są pobierane z bazy danych, a tam nazwaliśmy je bez polskich znaków.
Ponieważ z polskimi znakami w różnych bazach danych jest różnie, poza tym przeważnie nie można używać w nazwach spacji, lepiej więc nazywać kolumny bez polskich znaków, natomiast w czasie wyświetlania zamiast pobierać nazwy kolumn, można dodać je z poziomu Railsów.
Koniec i bomba, a kto czytał ten trąba.