我需要用户能够成为其他用户的粉丝.我该如何设计/设置?
我需要能够查看用户粉丝的详细信息.
例如.我有用户:Foo.Foo有3位粉丝.我希望能够找到Foo粉丝的名字.因此:
foo = User.first foo.name (returns 'Foo') foo.fans.first.user.name (should return 'bar', since 'bar' is a fan of 'foo')
这就是我现在设置的方式:
User model: embeds_many :fans references_many :fans Fan model: embedded_in :user, :inverse_of => :fans referenced_in :user In console, I do: User.first.fans.create!(:user => User.first)
我得到: Mongoid :: Errors :: InvalidCollection:不允许访问Fan的集合,因为它是一个嵌入式文档,请从根文档访问一个集合.我认为问题是,因为风扇模型嵌入在用户模型中,该模型也可以自我引用用户模型....
你的想法将不胜感激.
自我指涉协会怎么样:
class User include Mongoid::Document references_many :fans, :class_name => 'User', :stored_as => :array, :inverse_of => :fan_of references_many :fan_of, :class_name => 'User', :stored_as => :array, :inverse_of => :fans end # let's say we have users: al, ed, sports_star, movie_star sports_star.fans << al movie_star.fans << al sports_star.fans << ed movie_star.fans << ed movie_star.fans # => al, ed al.fan_of # => sports_star, movie_star
问题是您正在尝试仅使用嵌入式文档进行关系关联.如果Fan
在内部嵌入了a User
,则只能Fan
通过其父级访问User
.你不能做一些事情,Fan.find(some_id)
因为没有Fan
记录集合.
最终,MongoDB将支持允许您执行此操作的虚拟集合.目前,您必须使用关系类型关联.如果您想在这种情况下使用嵌入式文档,则必须创建一些丑陋且低效的自定义方法来搜索父记录.
使用MongoDB和Mongoid,我发现您可以轻松地在嵌入关联和关系关联之间切换.SQL类型的关系和嵌入式关系都有它们的位置,可以一起使用以产生很好的效果.