Как автоматически создать связанные записи в 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 ноль

Вопросы:

  1. Как я могу гарантировать, что каждый пользователь получит связанный Thingamajig? а также
  2. Как мне указать, что 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.

Другие вопросы по тегам