Cześć

w dzisiejszym odcinku chciałbym wam opowiedzieć o Active Recordzie. W jednym z poprzednich odcinków opowiadałem już o jednym z elementów Active Recorda - walidacjach. Dzisiaj chciałbym pokazać wam jak budować zapytania.

czym jest active record?

Active Record odpowiada za literę M w skrócie MVC czyli model. Jest to najpopularniejsze lecz nie jedyne narzędzie ORM w railsach.

ORM to warstwa pomiędzy tabelami w bazie danych a obiektami w naszym kodzie. Korzystając z ORMa, można łatwo przechowywać i pobierać z bazy danych bez bezpośredniego pisania instrukcji SQL. Oczywiście znajomość SQLa jest przydatną umiejętnością. Szczególnie, że nie wszystkie przypadki uda nam się ogarnąć przy pomocy Active Record

Active record reprezentuje modele i ich dane. Oraz relacje między nimi, pomaga nam budować zapytania a ostatecznie dzięki niemu możemy pisać zdecydowanie mniej kodu.

Nazewnictwo

Active Record przyjmuje kilka zasad jeżeli chodzi o nazewnistwo

Podtawowa, tabele w bazie danych występują w liczbie mnogiej. Np posts

ale model będzie się nazywać Post

jeżeli mamy bardziej złożone nazwy tabel np post_categories to model będzie pisany camel casem czyli PostCategory

Używanie

To tyle teorii, pora zacząć używać

Domyślnie Active Record obsługuje wszystkie akcje związane z CRUDem. CRUD to skrów od Create, Read, Update i Delete i opisuje podstawowe akcje na naszych danych, czyli zapis, odczyt, aktualizacja i usuwanie.

Tworzenie

chyba najważniejsza akcja, o ile nie korzystamy z jakieś bazy danych tylko do oczytu. To w jakiś sposób naszą bazę musimy zapełnić.

Post.create(name: "Foo", body: "Bar")

metoda create tworzy nowy obiekt Post i zwraca nam go

ale możemy też utworzyć nowy obiekt bez zapisywania

np.

post = Post.new
post.name = "Foo"
post.body = "Bar"

jeżeli byśmy chcieli zapisać nasz post należy użyć post.save

Odczyt

to chyba najczęściej używany element. O tym jak wyciągać dane można mówić bez końca, wszystko zależy od tego co chcemy osiągnąć oczywiście. Pewnie nagram jeszcze nie jeden film na ten temat, może nawet nie powiązany z active recordem.

Ale pokaże wam kilka podstawowych rzeczy:

Post.all

Zwraca wszystkie posty

Post.first
Post.last

Zwraca pierwszy i ostatni post

Post.first(3)

Zwraca pierwsze 3 (w podobny sposób można wyciągnąć ostatnie) posty

Post.find_by(title: 'Foo')

Zwraca post o tytule “foo”, jeżeli jest ich kilka zwraca pierwszy

Dlatego też można użyć

Post.where(title: 'Foo')

wtedy zwróci wszystkie posty o tym tytule. Można tu tak samo zastosować first lub last

a na koniec zostawiłem najważniejsze czyli find

domyślna metoda która szuka po id

Post.find(123)

jeżeli nie znajdzie posta zwróci błąd

Aktualizacja

Chyba nie muszę opowiadać o zastosowaniu aktualizacji, mamy post i chcemy coś zmienić

post = Post.first
post.title = "nowy tytuł"
post.save

można też inaczej to zrobić

Post.first.update(title: "nowy tytuł")

musicie pamiętać, że aktualizacja zwraca nam true jeżeli się powiedzie, więc jeżeli chcecie by metoda zwracała wam obiekt musicie go dodać na końcu np tak

post = Post.first
post.title = "nowy tytuł"
post.save
post

Kasowanie

Gdy już znajdziemy nasz obiekt możemy go skasować

Post.find(123).destroy

Możemy też skasować wszystkie dane w tabeli

Post.destroy_all

albo np jakiś zbiór danych Post.where(title: 'Foo').destroy_all

Oczywiście to co tutaj pokazałem to absolutnie minimum co możemy zrobić. Możemy dodawać joiny, możemy sprawdzać czy obiekty nie zawierają jakiś danych, możliwości jest naprawdę dużo i jak wspomniałem jeszcze wrócę do tego temu

Ale na chwilę obecną to wszystko co chciałem wam pokazać.

Dziękuje za oglądanie

Miłego kodowania!