MongoId встроенный документ со ссылкой
У меня есть следующий случай, когда у меня есть документ, который мне нужно встроить в некоторые документы, но для прослеживаемости (например, необходимо знать количество людей, подписанных на каждый тип), мне нужно, чтобы он был сохранен как другой документ. Поэтому, когда я пытаюсь сохранить набор типов по умолчанию, он говорит:
Mongoid::Errors::NoParent:
Problem:
Cannot persist embedded document Type without a parent document.
Я не знаю, как это сделать или как справиться с этой ситуацией, любая помощь или предложение приветствуется.
class Type
include Mongoid::Document
embedded_in :typeable, polymorphic: true
belongs_to :client
field :count, type: Integer # number of people interested in each Type
end
class Client
include Mongoid::Document
has_many :types
embeds_many :discounts, as: :discountable
end
class Discount
include Mongoid::Document
embeds_many :types, as: :typeable
embedded_in :discountable, polymorphic: true
end
2 ответа
Вы думали о наследовании?
Сделай свой Client
а также Discount
модели наследуются от Type
,
Они выиграют от вашего Type
поля, и вы сможете иметь автономный Type
Индекс тоже.
Простой ответ заключается в том, что вы не можете создавать автономные документы для встроенной модели (вы архитектурно предотвращаете это, выбирая встраивание). Если вам нужно иметь отдельный набор типов, вы должны использовать has_many
а также belongs_to
вместо embeds_many
а также embedded_in
,