Ruby on Rails
Mongoid
Поиск…
Монтаж
Сначала добавьте Mongoid
в ваш Gemfile
:
gem "mongoid", "~> 4.0.0"
а затем запустить bundle install
. Или просто запустите:
$ gem install mongoid
После установки запустите генератор для создания файла конфигурации:
$ rails g mongoid:config
который создаст файл (myapp)/config/mongoid.yml
.
Создание модели
Создайте модель (позвоните на нее User
), запустив:
$ rails g model User
который будет генерировать файл app/models/user.rb
:
class User
include Mongoid::Document
end
Это все, что вам нужно, чтобы иметь модель (хотя и не что иное, как поле id
). В отличие от ActiveRecord
нет файлов миграции. Вся информация о базе данных для модели содержится в файле модели.
Временные метки автоматически не включаются в вашу модель при ее создании. Чтобы добавить created_at
и updated_at
в вашу модель, добавьте
include Mongoid::Timestamps
к вашей модели внизу include Mongoid::Document
:
class User
include Mongoid::Document
include Mongoid::Timestamps
end
поля
В соответствии с Монгольской документацией существует 16 допустимых типов полей:
- массив
- BigDecimal
- логический
- Дата
- DateTime
- терка
- гашиш
- целое число
- BSON :: ObjectId
- BSON :: Binary
- Спектр
- Regexp
- строка
- Условное обозначение
- Время
- TimeWithZone
Чтобы добавить поле (назовем его name
и пусть оно будет String
), добавьте его в файл модели:
field :name, type: String
Чтобы установить значение по умолчанию, просто перейдите по default
:
field :name, type: String, default: ""
Классические ассоциации
Mongoid позволяет классические ассоциации ActiveRecord
:
- Один-к-одному:
has_one
/belongs_to
- Один-ко-многим:
has_many
/belongs_to
- Много-ко-многим:
has_and_belongs_to_many
Чтобы добавить ассоциацию (скажем, сообщения пользователя has_many
), вы можете добавить это в свой файл модели User
:
has_many :posts
и это для вашего файла модели Post
:
belongs_to :user
Это добавит поле user_id
в вашу модель Post
, добавит user
метод в класс Post
и добавит метод posts
в ваш класс User
.
Встраиваемые ассоциации
Монгоид допускает встраиваемые ассоциации:
-
embeds_one
:embeds_one
/embedded_in
- Один-ко-многим:
embeds_many
/embedded_in
Чтобы добавить ассоциацию (допустим, пользователь embeds_many
адресов), добавьте это в свой файл User
:
embeds_many :addresses
и это в файл модели вашего Address
:
embedded_in :user
Это позволит вставить Address
в модель User
, добавив метод addresses
в ваш класс User
.
Вызовы базы данных
Mongoid пытается иметь аналогичный синтаксис для ActiveRecord
когда это возможно. Он поддерживает эти вызовы (и многие другие)
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