ruby-on-rails – Mongoid ::错误:: MixedRelations

ruby-on-rails – Mongoid ::错误:: MixedRelations,第1张

概述我有一个用户模型嵌入“ one to many”关注列表,如下所示: class User include Mongoid::Document field :uid field :name field :user_hash embeds_many :watchlistsendclass Watchlist include Mongoid::Docum 我有一个用户模型嵌入“ one to many”关注列表,如下所示:

class User   include MongoID::document  fIEld :uID  fIEld :name       fIEld :user_hash  embeds_many :watchListsendclass 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 :Tagsend

监视列表还应引用many to many标签模型,反之亦然:

class Tag  include MongoID::document  fIEld :name,type: String  has_and_belongs_to_many :watchListsend

无论如何,这导致了一个错误,似乎不可能出现这种“混合”关系:

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'

UPDATE
请注意,必须删除监视列表(user.watchLists.clear),而不是每天重新创建(user.watchLists.find_or_create_by)四次,而Tag / s必须是持久的,与之前相关的嵌入式监视列表(. ..无论如何,我不确定是否可能,因为先前的下降/创建).

UPDATE更新(坦克到durran支持)
不,这是不可能的:如果您清除嵌入式文档,那么ID也会消失,每次创建新文件时都会生成新的文件.

你对如何克服这个问题有任何想法吗?
在referenced relations(三个不同的系列)中拆分所有三个模型是否更好?

解决方法 在mongoID中,您不能引用嵌入式文档.所以问题在于你的标签模型中定义了habtm.您可以在嵌入式监视列表中使用HABTM,而没有任何反向关系.

class User   include MongoID::document  embeds_many :watchListsendclass WatchList  include MongoID::document  embedded_in :user  has_and_belongs_to_many :Tags,inverse_of: nilendclass Tag  include MongoID::documentend

但是,如果必须在标签中引用关注列表,则可以手动维护两侧的ID数组,如Tyler已经指出的那样.

总结

以上是内存溢出为你收集整理的ruby-on-rails – Mongoid ::错误:: MixedRelations全部内容,希望文章能够帮你解决ruby-on-rails – Mongoid ::错误:: MixedRelations所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1222109.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存