rails mongoid跟随/取消跟踪指导和优化

时间:2013-05-06 00:30:36

标签: ruby-on-rails mongoid relationship twitter-follow

我一直试图找到一个理想的方法来跟踪mongoid并找到了这个。 HABTM mongoid following/follower

出于某种原因,我不确定这是多么优秀,这篇文章可以追溯到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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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