01
ORM to Object Relationship Model, w którym klasy odpowiadają tabelom w bazie danych, a obiekty odpowiadają bezpośrednio wierszom tabeli.
02
Rake to narzędzie Ruby, które zastępuje uniksowe „make” i korzysta z plików „Rakefile” oraz „.rake”, żeby utworzyć listę zadań. W Rails używa się go do typowych zadań administracyjnych, takich jak migrowanie bazy danych za pomocą skryptów, wczytywanie schematu do bazy i tak dalej.
03
Ruby: obiektowy język programowania inspirowany PERL-em i Pythonem.
Rails: framework służący do budowy aplikacji webowych.
04
Ruby jest typowany dynamicznie. Dlatego typ zmiennej możesz zmienić w locie.
W Ruby poniższe linie kodu, wykonane jedna po drugiej, nie spowodują błędów.
05
Getter pozwala odczytać zmienną instancji. Setter pozwala ją ustawić.
Metody gettera i settera możesz zdefiniować ręcznie.
Ale Ruby daje trzy akcesory, które robią to samo i wyglądają czyściej: attr_reader (getter), attr_writer (setter) oraz attr_accessor (setter i getter).
06
Do obiektu wysyłana jest wiadomość zawierająca nazwę metody. Jeśli ta metoda istnieje dla obiektu, obiekt ją wywołuje.
Stanie się to bardziej oczywiste, gdy przyjrzysz się metodzie send w Ruby.
07
W Gemfile określamy zależności aplikacji w Ruby. Plik znajduje się w katalogu głównym projektu.
08
Zawiera zapis dokładnych wersji zainstalowanych gemów. Dzięki temu te same wersje zainstalują się, gdy projekt sklonuje inny komputer.
Dla porównania: podanie gema w Gemfile bez przypięcia do konkretnej wersji zainstaluje po prostu jego najnowszą wersję.
09
MVC (Model-View-Controller) to wzorzec projektowy, na którym zbudowany jest Rails. Dzieli przetwarzanie informacji na trzy części.
Model zarządza danymi i logiką. Widok wyświetla informacje. Kontroler przyjmuje dane wejściowe i przygotowuje je dla modelu lub widoku.
10
Active Record to ORM (Object Relational Mapping), który mapuje modele na tabele bazy danych. Ułatwia to dostosowywanie aplikacji, bo nie musimy już pisać SQL-a wprost, żeby wczytywać, zapisywać czy usuwać obiekty.
Daje też pewną ochronę przed SQL injection.
01
Autoryzacja (nie mylić z uwierzytelnianiem) polega na tym, że różne typy użytkowników mają w aplikacji różne poziomy dostępu. Przydaje się, gdy typów użytkowników jest wiele i mają różne uprawnienia.
Autoryzację implementuje kilka gemów, na przykład Pundit i CanCanCan.
02
Callback to mylące określenie. To haki w cyklu życia obiektu, w których możesz wykonać metody.
Callbacków związanych z tworzeniem, aktualizowaniem i usuwaniem obiektu jest sporo — na przykład before_validation, after_save i after_destroy.
Przydają się do logiki warunkowej, takiej jak tworzenie powiązanego rekordu kontaktu przy tworzeniu rekordu użytkownika.
03
Aktualizacja obiektu po jego zapisaniu wymaga dodatkowej transakcji bazodanowej, żeby zapisać zmianę. Jeśli więc aktualizujesz atrybut obiektu, callback before_save jest wydajniejszy.
Czasem jednak informacja o obiekcie powstaje dopiero po zapisie (na przykład id). Jeśli więc do stworzenia powiązanego wpisu potrzebne jest id, trzeba to zrobić w callbacku after_save.
04
Inicjalizatory zawierają logikę konfiguracji i uruchamiają się tylko podczas ładowania aplikacji. Oznacza to, że po ich zmianie trzeba zrestartować serwer Rails. Znajdują się w katalogu /config/initializers.
05
Najczęstszy callback destroy w aplikacjach Rails definiuje się w asocjacjach w plikach modeli. Na przykład poniższy fragment usuwa powiązane komentarze, gdy artykuł zostaje usunięty.
06
Logika biznesowa powinna znajdować się w modelach, a nie w kontrolerach. Dzięki temu łatwiej testować ją jednostkowo i jest bardziej wielokrotnego użytku.
Kontrolery są tylko rękami przekazującymi informacje między widokami a modelami.
Zwykle podaje się to jako radę dla początkujących programistów Rails. W praktyce nie jest to zalecane, zwłaszcza w dużych aplikacjach.
07
Wraz ze wzrostem kodu „grube” modele wymykają się spod kontroli, robią zbyt wiele i stają się niezarządzalne. Modele powinny odpowiadać za trwałość danych, nie będąc przeładowane logiką.
Modele można odchudzić, pamiętając o zasadzie pojedynczej odpowiedzialności i przenosząc logikę do innych wzorców projektowych, takich jak obiekty usługowe.
08
Metody klasowe są dostępne w klasach, a metody instancji — w instancjach (oczywiście). Zwykle służą do różnych celów.
W klasie Article metoda instancji może policzyć liczbę słów w treści konkretnego artykułu, a metoda klasowa — liczbę artykułów danego autora spośród wszystkich artykułów (widzisz różnicę w zakresie?).
Metody klasowe oznacza się przez def self.nazwa_metody.
09
Programista ręcznie tworzy pliki migracji i dodaje do nich instrukcje.
Mówią one ActiveRecord, jak zmienić istniejący stan bazy danych. Dlatego usuwanie lub modyfikowanie wcześniejszych migracji może zepsuć bazę i nie jest zalecane.
Ręczne tworzenie plików migracji różni się od innych frameworków, takich jak Django, gdzie określasz docelowy stan bazy danych, a migracje wprowadzające potrzebne zmiany generują się automatycznie.
10
Wzorców projektowych w Rails jest sporo: obiekty usługowe, obiekty wartości, obiekty formularzy, obiekty zapytań, obiekty widoku, obiekty polityk i dekoratory.
Szczegółowy opis każdego z nich to temat na cały osobny wpis, ale tutaj znajdziesz świetny tutorial z przykładami.
01
Ruby nie pozwala dziedziczyć z więcej niż jednej klasy nadrzędnej, ale umożliwia mixiny modułów przez include i extend.
02
Ruby jest typowany silnie. Jeśli spróbujesz obliczyć „hello” + 3, dostaniesz błąd.
Dla porównania JavaScript jest typowany słabo i po prostu obliczy to samo działanie jako „hello3”.
03
04
Konstruktor definiuje się metodą initialize, która jest wywoływana przy tworzeniu nowej instancji klasy. Zdefiniowanie tej metody nie jest wymagane. Często służy do nadania wartości atrybutom nowych instancji.
05
Logika helpera powinna wspierać wyłącznie widoki.
Dobrym kandydatem na helper jest logika formatowania dat, potrzebna w kilku różnych widokach.
06
Używaj self przy definiowaniu i wywoływaniu metod klasowych.
W klasie self odnosi się do bieżącej klasy, więc jest wymagane, gdy metoda klasowa wywołuje inną metodę klasową.
self.class.metoda jest wymagane, gdy instancja wywołuje metodę klasową.
07
Rack to API znajdujące się między serwerem WWW a Rails. Pozwala podłączać i wymieniać frameworki, na przykład Rails na Sinatrę, albo serwery WWW, na przykład Unicorna na Pumę.
08
Zarówno proc, jak i lambda to zapisane bloki, ale ich składnia i zachowanie nieco się różnią.
Lambda zwraca wartość z samej siebie, a proc zwraca ją z metody, w której się znajduje.
Zwróć uwagę, że method_proc zwraca 1, bo wywołanie proca kończy wykonywanie wewnątrz metody.
09
PORO to skrót od Plain Old Ruby Object.
Choć w Ruby niemal wszystko jest obiektem, ActiveRecord zwykle korzysta z wielu złożonych obiektów. Termin PORO oznacza więc zazwyczaj mały, prosty obiekt wspierający logikę biznesową.
10
W naszej Talent Network czeka setki sprawdzonych w boju ekspertów od tworzenia oprogramowania.
Jesteś programistą Ruby on Rails i szukasz świetnych projektów? Dołącz jako Talent
Dane rejestrowe:
Firma
Usługi
Najczęściej poszukiwani specjaliści