我正在尝试实现自引用关联,以便为给定用户创建连接列表(如FB或linkedIn)。
所有的教程都实现了“跟随/跟随者”模型,这个模型与这个模型有点不同,所以......让我们变得有创意:
除了用户表之外,我还有一个user_connections表,其中包含以下字段:
并以下列方式“建模”:
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
开启users
。id
=user_connections
。requester_id
内部加入user_connections
开启users
。id
=user_connections
。requested_id
在哪里user_connections
。requester_id
= 1 ANDuser_connections
。requested_id
= 1
我这样做是否正确?
此外,有关如何实现“连接”搜索二级等的任何提示?
答案 0 :(得分:1)
您可以创建一个包含属性follower_id,follows_id
的表然后记录每个用户在该表中关注的内容。这是一个很多很多的关系 所以即使简不跟随约翰,约翰也可以跟随简。
答案 1 :(得分:0)
def connections
i_invited + invited_me
end
这解决了问题...
但是有了回报:(尚未测试,但我认为)这是一个数组而不是关系..