Ruby on Rails - Active Records

Rails Active Record to warstwa Object / Relational Mapping (ORM) dostarczana z Railsami. Jest ściśle zgodny ze standardowym modelem ORM, który przedstawia się następująco -

  • tabele odwzorowują klasy,
  • wiersze są mapowane na obiekty i
  • kolumny są mapowane na atrybuty obiektu.

Rails Active Records zapewniają interfejs i powiązanie między tabelami w relacyjnej bazie danych a kodem programu Ruby, który manipuluje rekordami bazy danych. Nazwy metod Ruby są generowane automatycznie na podstawie nazw pól tabel bazy danych.

Każdy obiekt Active Record ma CRUD (CReate, Read, Update i Delete) metody dostępu do bazy danych. Ta strategia umożliwia proste projekty i bezpośrednie mapowanie między tabelami bazy danych i obiektami aplikacji.

Tłumaczenie modelu domeny na język SQL

Tłumaczenie modelu domeny na SQL jest generalnie proste, o ile pamiętasz, że musisz pisać SQL przyjazny dla Railsów. W praktyce musisz przestrzegać pewnych zasad -

  • Każda jednostka (taka jak książka) otrzymuje tabelę w bazie danych nazwaną jej nazwą, ale w liczbie mnogiej (książki).

  • Każda taka tabela dopasowywania jednostek ma pole o nazwie id , które zawiera unikalną liczbę całkowitą dla każdego rekordu wstawionego do tabeli.

  • Dana jednostka x i jednostka y, jeśli jednostka y należy do jednostki x, to tabela y zawiera pole o nazwie x_id.

  • Większość pól w dowolnej tabeli przechowuje wartości prostych właściwości tej jednostki (wszystko, co jest liczbą lub ciągiem).

Tworzenie plików Active Record (modeli)

Aby stworzyć pliki Active Record dla naszych encji dla aplikacji bibliotecznej, przedstawione w poprzednim rozdziale, należy wydać następujące polecenie z najwyższego poziomu katalogu aplikacji.

library\> rails script/generate model Book
library\> rails script/generate model Subject

Powyżej rails generate model book polecenia generują kod automatyczny, jak poniżej -

Mówisz generatorowi, aby utworzył modele o nazwie Książka i Temat do przechowywania wystąpień książek i przedmiotów. Zwróć uwagę, że wpisujesz książkę i temat z dużej litery oraz używasz liczby pojedynczej. To jest paradygmat Rails, którego powinieneś przestrzegać za każdym razem, gdy tworzysz model.

Kiedy używasz narzędzia do generowania, Rails tworzy rzeczywisty plik modelu, który zawiera wszystkie metody unikalne dla modelu i zdefiniowanych reguł biznesowych, plik testów jednostkowych do wykonywania programowania sterowanego testami, przykładowy plik danych (zwany fixtures) do użycia z testami jednostkowymi i migracją Railsów, która ułatwia tworzenie tabel i kolumn bazy danych.

Oprócz tworzenia wielu innych plików i katalogów, spowoduje to utworzenie plików o nazwie book.rb i subject.rb zawierający definicję szkieletu w app/models informator.

Treść dostępna w book.rb -

class Book < ActiveRecord::Base
end

Treść dostępna w subject.rb -

class Subject < ActiveRecord::Base
end

Tworzenie skojarzeń między modelami

Jeśli masz więcej niż jeden model w swojej aplikacji szynowej, musisz utworzyć połączenie między tymi modelami. Możesz to zrobić za pośrednictwem skojarzeń. Active Record obsługuje trzy typy asocjacji -

  • one-to-one- Relacja jeden do jednego istnieje, gdy jeden element ma dokładnie jeden inny element. Na przykład osoba ma dokładnie jedno urodziny lub pies ma dokładnie jednego właściciela.

  • one-to-many- Relacja jeden do wielu występuje, gdy pojedynczy obiekt może być członkiem wielu innych obiektów. Na przykład jeden przedmiot może mieć wiele książek.

  • many-to-many - Relacja wiele-do-wielu występuje, gdy pierwszy obiekt jest powiązany z co najmniej jednym drugim obiektem, a drugi obiekt jest powiązany z jednym lub wieloma pierwszymi obiektami.

Wskazujesz te powiązania, dodając deklaracje do swoich modeli: has_one, has_many, contrib_to i has_and_belongs_to_many.

Teraz musisz powiedzieć Railsom, jakie relacje chcesz ustanowić w systemie danych biblioteki. Aby to zrobić, zmodyfikuj book.rb i subject.rb, aby wyglądały następująco -

class Book < ActiveRecord::Base
   belongs_to :subject
end

W powyższym przykładzie użyliśmy pojedynczego przedmiotu, ponieważ jedna książka może należeć do jednego przedmiotu.

class Subject < ActiveRecord::Base
   has_many :books
end

Użyliśmy tutaj liczby mnogiej, ponieważ jeden przedmiot może mieć wiele książek.

Wdrażanie walidacji w modelach

Implementacja walidacji odbywa się w modelu Railsowym. Dane, które wprowadzasz do bazy danych są zdefiniowane w rzeczywistym modelu Rails, więc sensowne jest tylko zdefiniowanie, jakie prawidłowe dane dotyczą tej samej lokalizacji.

Walidacje są -

  • Wartość pola tytułu nie powinna wynosić NULL.
  • Wartość pola ceny powinna być liczbowa.

otwarty book.rb w app\model subdiractory i umieścić następujące walidacje -

class Book < ActiveRecord::Base
   belongs_to :subject
   validates_presence_of :title
   validates_numericality_of :price, :message=>"Error Message"
end
  • validates_presence_of - zabezpiecza pola „NOT NULL” przed brakiem danych wejściowych użytkownika.

  • validates_numericality_of - zapobiega wprowadzaniu przez użytkownika danych nienumerycznych.

Oprócz walidacji wymienionych powyżej istnieją inne powszechne walidacje. Sprawdź Szybki przewodnik po Railsach .

Co jest następne?

W następnym rozdziale nauczymy się migracji Railsów, która pozwala używać Rubiego do definiowania zmian w schemacie bazy danych, umożliwiając użycie systemu kontroli wersji do synchronizacji z rzeczywistym kodem.