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