在RoR应用程序上的用户之间实现连接(类似FB)

时间:2013-12-17 19:13:09

标签: ruby-on-rails activerecord ruby-on-rails-4 social-networking

我正在尝试实现自引用关联,以便为给定用户创建连接列表(如FB或linkedIn)。

所有的教程都实现了“跟随/跟随者”模型,这个模型与这个模型有点不同,所以......让我们变得有创意:

除了用户表之外,我还有一个user_connections表,其中包含以下字段:

  • requester_id
  • requested_id (...)

并以下列方式“建模”:

User.rb:

  # Connections
  has_many :user_connections, foreign_key: 'requester_id' # people that i invited to connect to me
  has_many :user_inverse_connections, foreign_key: 'requested_id', class_name: 'UserConnection' # people that invited me to connect with them

  has_many :i_invited, source: :requester, through: :user_connections
  has_many :invited_me, source: :requested, through: :user_inverse_connections

  def connections
    i_invited.merge(invited_me)
  end

我试着测试一下:

2.0.0-p247 :003 > u.connections
  User Load (84.3ms)  SELECT `users`.* FROM `users` INNER JOIN `user_connections` ON `users`.`id` = `user_connections`.`requester_id` INNER JOIN `user_connections` ON `users`.`id` = `user_connections`.`requested_id` WHERE `user_connections`.`requester_id` = 1 AND `user_connections`.`requested_id` = 1

但正如可能注意到的那样,它没有成功:

  

Mysql2 ::错误:不唯一的表/别名:'user_connections':SELECT   users。*来自users内部加入user_connections开启usersid =   user_connectionsrequester_id内部加入user_connections开启   usersid = user_connectionsrequested_id在哪里   user_connectionsrequester_id = 1 AND   user_connectionsrequested_id = 1

我这样做是否正确?

此外,有关如何实现“连接”搜索二级等的任何提示?

2 个答案:

答案 0 :(得分:1)

您可以创建一个包含属性follower_id,follows_id

的表

然后记录每个用户在该表中关注的内容。这是一个很多很多的关系 所以即使简不跟随约翰,约翰也可以跟随简。

答案 1 :(得分:0)

def connections
   i_invited + invited_me
end

这解决了问题...

但是有了回报:(尚未测试,但我认为)这是一个数组而不是关系..