2

我一直试图找到一个理想的解决方案来跟随 mongoid 并找到了这个。 HABTM mongoid 追随者/追随者

出于某种原因,我不确定这有多优化,而这篇文章早在 2011 年就已经发布了。

如果以这种方式实现,则追随者和追随者 id 将保存在数组中。对于少量追随者来说,这很好,而且可能很快。但是想象一下,如果有成千上万的追随者,如果你每次都在数组中搜索一项,那么遍历数组可能不是最快的方法。

基于本教程链接,建议将http://ruby.railstutorial.org/chapters/following-users 放入关系表中,当您只需要检查关系时,这可以快速查找。

我的问题是下面的代码非常适合 mongoid 优化吗?当有大量追随者时,我需要一些专家建议你们如何处理人际关系。

谢谢。

class User
  include Mongoid::Document

  field :name, type: String

  has_and_belongs_to_many :following, class_name: 'User', inverse_of: :followers, autosave: true
  has_and_belongs_to_many :followers, class_name: 'User', inverse_of: :following

  def follow!(user)
    if self.id != user.id && !self.following.include?(user)
    self.following << user
  end
 end

  def unfollow!(user)
   self.following.delete(user)
 end
 end
4

2 回答 2

0

您可以创建一个实际Follow模型(因此将保留在自己的集合中),如下所示:

class Follow
  include Mondoid::Document

  belongs_to :user
  belongs_to :followed_user, class_name: 'User'

end

class User
  include Mongoid::Document

  field :name, type: String
  has_many :follows

  def follow!(user)
    follows.create(followed_user: user)
  end

  def unfollow!(user)
    follows.where(followed_user_id: user.id).destroy
  end
end
于 2013-05-06T07:12:33.360 回答
0

添加了依赖于用户销毁的完整性:

class Follow
  include Mondoid::Document

  belongs_to :user
 belongs_to :followed_user, class_name: 'User'

  end

class User
  include Mongoid::Document

  field :name, type: String
  has_many :follows, :dependent => :destroy

  def follow!(user)
    follows.create(followed_user: user)
  end

  def unfollow!(user)
    follows.where(followed_user_id: user.id).destroy
 end

结尾

于 2013-05-07T05:10:22.003 回答