当前位置:  开发笔记 > 编程语言 > 正文

使用方法:用户有粉丝

如何解决《使用方法:用户有粉丝》经验,为你挑选了1个好方法。

我需要用户能够成为其他用户的粉丝.我该如何设计/设置?

我需要能够查看用户粉丝的详细信息.

例如.我有用户: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的集合,因为它是一个嵌入式文档,请从根文档访问一个集合.我认为问题是,因为风扇模型嵌入在用户模型中,该模型也可以自我引用用户模型....

你的想法将不胜感激.



1> bowsersenior..:

自我指涉协会怎么样:

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类型的关系和嵌入式关系都有它们的位置,可以一起使用以产生很好的效果.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有