Ruby on Rails
Mongoid
Szukaj…
Instalacja
Najpierw dodaj Mongoid
do swojego Gemfile
:
gem "mongoid", "~> 4.0.0"
a następnie uruchom bundle install
. Lub po prostu uruchom:
$ gem install mongoid
Po instalacji uruchom generator, aby utworzyć plik konfiguracyjny:
$ rails g mongoid:config
który utworzy plik (myapp)/config/mongoid.yml
.
Tworzenie modelu
Utwórz model (nazwijmy go User
), uruchamiając:
$ rails g model User
który wygeneruje plik app/models/user.rb
:
class User
include Mongoid::Document
end
To wszystko, czego potrzebujesz, aby mieć model (choć tylko pole id
). W przeciwieństwie do ActiveRecord
, nie ma plików migracji. Wszystkie informacje o bazie danych dla modelu są zawarte w pliku modelu.
Znaczniki czasu nie są automatycznie uwzględniane w modelu podczas jego generowania. Aby dodać created_at
i updated_at
do swojego modelu, dodaj
include Mongoid::Timestamps
do twojego modelu poniżej include Mongoid::Document
taki jak:
class User
include Mongoid::Document
include Mongoid::Timestamps
end
Fields
Zgodnie z dokumentacją Mongoid istnieje 16 prawidłowych typów pól:
- Szyk
- BigDecimal
- Boolean
- Data
- Data i godzina
- Pływak
- Haszysz
- Liczba całkowita
- BSON :: ObjectId
- BSON :: Binarne
- Zasięg
- Regexp
- Strunowy
- Symbol
- Czas
- TimeWithZone
Aby dodać pole (nazwijmy go name
i niech będzie String
), dodaj to do pliku modelu:
field :name, type: String
Aby ustawić wartość domyślną, wystarczy przekazać default
opcję:
field :name, type: String, default: ""
Klasyczne skojarzenia
Mongoid pozwala klasycznym powiązaniom ActiveRecord
:
- One-to-One:
has_one
/belongs_to
- Jeden do wielu:
has_many
/belongs_to
- Wiele do wielu:
has_and_belongs_to_many
Aby dodać stowarzyszenie (powiedzmy, że użytkownik has_many
posty), możesz dodać go do User
pliku modelu:
has_many :posts
i to do pliku modelu Post
:
belongs_to :user
Spowoduje to dodanie pola user_id
do modelu Post
, dodanie metody user
do klasy Post
i dodanie metody posts
do klasy User
.
Wbudowane skojarzenia
Mongoid umożliwia wbudowane powiązania:
- Jeden do jednego:
embeds_one
/embedded_in
- Jeden do wielu:
embeds_many
/embedded_in
Aby dodać powiązanie (powiedzmy, że użytkownik umieszcza embeds_many
adresów), dodaj to do pliku User
:
embeds_many :addresses
i to do pliku modelu Address
:
embedded_in :user
Spowoduje to osadzenie Address
w modelu User
, dodając metodę addresses
do klasy User
.
Połączenia z bazą danych
Mongoid próbuje mieć podobną składnię jak ActiveRecord
kiedy tylko jest to możliwe. Obsługuje te połączenia (i wiele innych)
User.first #Gets first user from the database
User.count #Gets the count of all users from the database
User.find(params[:id]) #Returns the user with the id found in params[:id]
User.where(name: "Bob") #Returns a Mongoid::Criteria object that can be chained
#with other queries (like another 'where' or an 'any_in')
#Does NOT return any objects from database
User.where(name: "Bob").entries #Returns all objects with name "Bob" from database
User.where(:name.in => ['Bob', 'Alice']).entries #Returns all objects with name "Bob" or "Alice" from database
User.any_in(name: ["Bob", "Joe"]).first #Returns the first object with name "Bob" or "Joe"
User.where(:name => 'Bob').exists? # will return true if there is one or more users with name bob