Как автоматически создать связанные записи в MongoDB с помощью Mongoid?
Я все еще схожу с ума MongoDB
а также Mongoid
в частности.
Допустим, у меня есть User
и каждый User
имеет один Thingamajig
, Когда я создаю User
Я хочу, чтобы система автоматически также создала пустую Thingamajig
для этого User
,
каждый Thingamajig
имеет whatsit
поле, которое должно быть уникальным, если оно имеет значение, но не может иметь значения при создании.
Поэтому я определяю следующие классы.
class Thingamajig
include Mongoid::Document
field :whatsit, type: String
index({whatsit: 1}, {unique: true, name: 'whatsit_index'})
end
class User
include Mongoid::Document
field :name, type: String
index({name: 1}, {unique: true, name: 'user_name_index'})
embeds_one :thingamajig, dependent: :nullify, autobuild: true
end
Однако, что я нахожу, когда я
User.create!(name: 'some name')
в том, что User.find(name: 'some name').thingamajig
ноль
Вопросы:
- Как я могу гарантировать, что каждый пользователь получит связанный Thingamajig? а также
- Как мне указать, что
name
полеUser
необходимо?
К вашему сведению, я использую Sintara
не Rails
(если это важно для кого-либо).
1 ответ
1 - autobuild: true
вариант обычно должен был сделать свое дело. Я думаю, что проблема в том, что вы забыли добавить другую сторону отношения к модели Тингамаджиг:
class Thingamajig
include Mongoid::Document
embedded_in :user
...
end
2 - Чтобы указать обязательные поля, используйте проверки:
class User
include Mongoid::Document
field :name, type: String
validates_presence_of :name
...
end
Mongoid использует проверки ActiveModel.