У меня есть пользовательская модель, встраивающая " один ко многим " Списки наблюдения, подобные следующим:
class User
include Mongoid::Document
field :uid
field :name
field :user_hash
embeds_many :watchlists
end
class Watchlist
include Mongoid::Document
field :html_url
field :description
#field :name
field :fork_, :type => Boolean
field :forks, :type => Integer
field :watchers, :type => Integer
field :created_at, :type => DateTime
field :pushed_at, :type => DateTime
field :avatar_url
embedded_in :user
has_and_belongs_to_many :tags
end
Список наблюдения также должен ссылаться на многие ко многим Модель тега и наоборот:
class Tag
include Mongoid::Document
field :name, type: String
has_and_belongs_to_many :watchlists
end
В любом случае, это вызывает ошибку и кажется, что такое «смешанное» отношение невозможно:
Mongoid::Errors::MixedRelations (Referencing a(n) Watchlist document from the Tag document via a relational association is not allowed since the Watchlist is embedded.):
app/controllers/home_controller.rb:53:in `tagging'
ОБНОВЛЕНИЕ Обратите внимание, что список наблюдения должен быть отброшен (user.watchlists.clear), а не создан заново (user.watchlists.find_or_create_by) четыре раза в день, в то время как теги / теги должны быть постоянными, связывая те же встроенные списки наблюдения, что и раньше (.. Я не уверен, что это возможно в любом случае из-за предыдущего выпадения / создания).
ОБНОВЛЕНИЕ ОБНОВЛЕНИЯ (танки для поддержки durran ) Нет, этоневозможно: если вы очистите встроенные документы, идентификаторы также исчезнут, и новые будут генерироваться каждый раз, когда вы создаете новый.
Есть ли у вас какие-либо идеи о том, как их преодолеть?Лучше ли разделить все три модели в ссылочных отношениях (три разных коллекции)?