如何多次加入同一个表?

我正在查询给定两个用户的共同朋友。 下面的查询应该完成大部分工作,友谊表应该是不言而喻的,包含user_idfriend_id

 SELECT `users`.* FROM `users` INNER JOIN `friendships` `a` ON `users`.`id` = `a`.`friend_id` INNER JOIN `friendships` `b` ON `users`.`id` = `b`.`friend_id` WHERE `a`.`user_id` = 1 AND `b`.`user_id` = 2 

令我困惑的是如何编写这个语义ActiveRecord 。 使用ActiveRecord,您可以加入一个关联,但只能加入一次。 那么你如何在ActiveRecord尽可能明白地写这个呢?

我用joins字符串参数来做:

 User. joins("INNER JOIN friendships a ON users.id = a.friend_id"). joins("INNER JOIN friendships b ON users.id = b.friend_id"). where("a.user_id" => 1, "b.user_id" => 2) 

我不知道用Active Record进行这种连接的更高级别的方法。

首先,你应该在用户友谊之间建立适当的模型关系

 user model: has_many :friendships friendship model: belongs_to :user 

有了这个:你可以在你的迭代中获得 activerecords,如:

 users = User.all users.each do |user| user.friendships ..... end 

或者,由特定用户,如:

 user = User.first user.friendships #returns association or User.first.friendships 

对于2个特定用户(给定) ,您可以这样做:

 User.where(id: [1,2]) #array of user id, then get the friendship record as above. 

希望这可以帮助!