Model - ActiveRecord
Modele w Rails reprezentowane są przez klasy dziedziczące po klasie bazowej ActiveRecord::Base. ActiveRecord jest mechanizmem ORM, tzn. przedstawia tabelaryczne dane z bazy danych w formie klas także obiektów. Tabeli w bazie danych odpowiada zespół dziedzicząca po ActiveRecord, kolumnom tabeli - właściwości(atrybuty) tej klasy, natomiast wartościom pól w bazie danych wartości atrybutów obiektów danej klasy. Oto przykład jaki szyfr wolno wprowadzić się dysponując w bazie danych przedstawioną tabelą:
users:
id (INTEGER) name (VARCHAR) created_at (DATETIME) 1 Adam 2007-01-14 22:07:13 2 Ewa 2007-01-05 13:56:48 # zespół User dziedziczy po klasie ActiveRecordUser.count # => 2 adam = User.find(1) adam.name # => "Adam" ewa = User.find_by_name "Ewa" ewa.created_at.to_s # => "Fri Jan 05 13:56:48 +0100 2007"
jacek = User.new jacek.name = "Jacek" if jacek.save # notacja aż do bazy danych się udał User.count == 3 # => true else # wystąpiły błędy, np. pole oznaczone w charakterze NOT NULL nie ma w obiekcie przypisanej żadnej wartości end
Warto zauważyć, iż ActiveRecord automatycznie dopasowuje klasę User aż do tabeli users oraz jest w stanie automatycznie napełniać niektóre pola (created_at). ot tak każda tabela przeznaczona aż do pracy z ActiveRecord powinna mieć kolumnę "id" typu INTEGER, która jest jest głównym kluczem(PRIMARY KEY).
W klasach definiujących modele możemy określać zachodzące pośrodku modelami relacja (jeden aż do jednego, jeden aż do wielu itp.), wymagania dotyczące rekordów (np. długość hasła) czy funkcje zwrotne (ang. callbacks) wywoływane m.in. przy zapisie danych aż do bazy. wolno także wykonywać dodawanie inną funkcjonalność, w charakterze np. modus sprawdzająca w oparciu imienia czy kupujący jest mężczyzną czy kobietą:
class User < ActiveRecord::Base # ... def is_male? name.last != "a" # o ile tak zwróci true end # ... endCo zgodność z rzeczywistością Rails zostało zaprojektowane z myślą o pracy z relacyjnymi bazami danych, lecz tworząc plik z definicją klasy w katalogu app/models możemy wykreować klasę modelu, która nie dziedziczy po ActiveRecord::Base. Taka zespół przypuszczalnie na przykład wdziewać dane z plików XML. (lokalizacja pliku nie jest wymogiem, pomaga ostatkiem sił w odszukaniu pliku klasy.)