Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Rails pod Ruby Schemat Model – View - Controller.

Podobne prezentacje


Prezentacja na temat: "Rails pod Ruby Schemat Model – View - Controller."— Zapis prezentacji:

1 Rails pod Ruby Schemat Model – View - Controller

2 Środowiska pracy Development Test Production Definicja połączeń z bazą danych w pliku database.yml Można definiować własne środowiska

3 Konwencje nazewnicze Klasy wielką literą + nowe wyrazy wielką Zmienne małą, wyrazy oddzielamy _ Nazwy plików.rb analogicznie jak zmienne Odpowiadające klasom tabele mają nazwę w formie mnogiej, z małych liter i wyrazy oddzielane _, np: LineItem line_items

4 Active Support Zestaw bibliotek dostępny dla każdego komponentu rails, np: - dodatki do wartości numerycznych(odd?, kilobytes, weeks,...) - daty (from_now, ago,...) - napisów (singularize, pluralize, inne mniej oryginalne,...)

5 Active support c.d. Wbudowany logger - logger.warn(Nie rób tego!) Testowanie i odpluskwianie - bezposredni dostep do danych poprzez irb (+ breakpointy) - dodatkowy loger STDERR (WEBrick) - funkcja debug(obiekt) wyświetla obiekty w zrozumiały sposób (XML)

6 Active Record Odwzorowuje wzajemnie dane z bazy i model (klasy) Zmiana w bazie automatycznie poprawia model Można wyłączyć :) dyrektywą set_table_name Problem z bool - forma ? - nadpisanie metody

7 Serializacja Klasy serializowane do tekstu (format YAML) - zdefiniowanie pola tekstowego w BD - dyrektywa serializacji serialize :nazwa_atrybutu - przypisanie dowolnego obiektu do danego atrybutu

8 Połączenie z BD Plik database.yml Nadpisanie metody ActiveRecord :: Base.establish_connection Różne parametry w zależności od rodzaju BD

9 BD CRUD cat.save i cat.save! Odczyt cat = Cat.find(id) cats = Cat.find(id_list) cats = Cat.find(:all, :conditions => tail = 'long' :order => name DESC) cats = Cat.find_all_by_tail('long') cats = Cat.find_by_tail_and_head('long', 'heavy')

10 ...rUD W przypadku szukania po kluczu może wyrzucić wyjątek cat.reload update(5, :pseudo => nowe) update_all(cena = 2*cena,kolor like '%cz%') delete(ids), delete_all(warunki)

11 Transakcje Pojedyncze intrukcje w obrębie transakcji, także dla zależności Brak wsparcia dla dwufazowego potwierdzenia(two-phase commits) Zagnieżdżone transakcje Cats.transaction do end Cats.transaction(obj1, obj2,...) do end

12 Walidacja validate() zawsze przed zapisem validate_on_create(), validate_on_update() można się zapytać metodą valid?() def validate_on_create if self.find_by_name(name) errors.add(:name, is already being used) end end

13 Callbacks

14 Obserwator Podklasa ActiveRecord ::Observer Domyślnie StajniaObserver obserwuje zdarzenia w stajni Można samodzielnie określić obserwowane modele metodą: observe Cat, Dog, Payment

15 Zaawansowane atrybuty AR Mapa atrybutów Dostęp przez read_attribute() przechowuje dane o typie Konwersja wewnątrz akcesora def netto Float(read_attribute(wartosc_netto)) end

16 Id w klasach modelu Porównywanie '==' objektów-modeli na podstawie id Id jest ustalane dopiero po zapisaniu Id jest potrzebne do aktualizacji, cichy błąd

17 Action Controller Odpowiedź na żądanie http://www.ziom.pl/store/list Załadowanie controllers/store_controller.rb Stworzenie objektu StoreController Wstrzykniecie helpers/store_helper.rb do kontrolera Załadowanie models/store.rb jeśli istnieje

18 Mapowanie url config/routes.rb ziom.pl/store/add_to_cart/123 Własne wzorce dopasowania, np: map.connect ':controller/:action/:id' nazwane i nienazwane kontroler metoda parametr wywołania(tu id)

19 Rozpatrzenie akcji Jeśli odpowiadająca metoda nie jest zaimplementowa wywoływane jest method_missing() Jeśli Kontroler nie implementuje method_missing(), wywoływany jest template odpowiadający kontrolerowi z akcją Jeśli nie ma template'a zdefiniowanego otrzymujemy błąd: Uknown Action

20 Ciasteczka Ciasteczka w RoR: cookies[:the_time] = Time.now.to_s time = cookies[:the_time] Wartości przechowywane są w postaci łancuchów znakowych

21 Sesja Działa jak mapa, może przechowywać objekty dające się serializować Przechowuje flash Session_id przechowywany jest w ciasteczku Zmiany poprzez zmiany opcji sesji domyślnej

22 Flash Łącznik pomiędzy żądaniami, przechowywany w sesji Atrybuty note warning error Metody now – resetuje stan keep – zachowuje informacje do następnego żadania

23 Filtry i weryfikacja Rodzaje filtrów: before_filter: metoda after_filter: metoda around_filter: klasa z metodami before(controller), after(controller) Pierwsze dwa wywołania mają atrybuty :only i :except, określające akcje, których dotyczy filtr Weryfikatory jako wyszczególniony rodzaj filtrów

24 Template'y Odnajduje przy pomocy render() w domyślnym katalogu views/nazwa_kontrolera/nazwa_akcji Layouty aplikowane do każdej akcji kontrolera Przydatna funkcja html_escape() {= h()} - coś jak CDATA

25 Moduły pomocnicze Żeby nie umieszczać za dużo kodu w template'ach warto użyć modułu Helper. Metody Helpera są dostępne w template'ach i layout'ach Dla kontrolera lub aplikacji Wiele wbudowanych modułów udostepniających popularne funkcje pomocnicze

26 Testy Osobne środowisko(inny schemat) Elementy: Testy funkcjonalne kontrolerów Testy Active Record'ów. Odpala metody test_* w izolowanych scenariuszach Odwołania do Fixtures – nie ma duplikowania danych np. wew. asercji

27 Fixtures Definiują początkowe zawartość modelu np. definicję kilku przykładowych obiektów danej klasy christmas_book: id:1 title:It's Christmas! price:29,99 date:1.day.from_now

28 Inne funkcje Cache Na poziomie stron Na poziomie akcji Wbudowane wsparcie dla AJAX Action Mailer Web Services w postaci Action WS Nie do końca satysfakcjonuje specyfikację w3c Ma za zadanie dostarczyć popularną funkcjonalność, często wykorzystywaną w przyrodzie


Pobierz ppt "Rails pod Ruby Schemat Model – View - Controller."

Podobne prezentacje


Reklamy Google