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