Ruby on rails 3 新手:只有在双方都有活跃记录的情况下,才能得到对方的喜欢?

Ruby on rails 3 新手:只有在双方都有活跃记录的情况下,才能得到对方的喜欢?,ruby-on-rails-3,activerecord,mutual-friendship,Ruby On Rails 3,Activerecord,Mutual Friendship,什么是获得共同喜欢的好方法?其中两个用户彼此喜欢(如在朋友列表中),并且只获得相互匹配的用户 user_id | likes_id 1 2 2 1 Only get results where both of the users likes each other ( friendship ) 我尝试了一些连接,但无法真正使其工作,是否有建筑AR功能来获得上述结果? 通过这种方式,你可以在用户之间建立关系,就像我用这

什么是获得共同喜欢的好方法?其中两个用户彼此喜欢(如在朋友列表中),并且只获得相互匹配的用户

user_id   | likes_id 
1           2                
2           1

Only get results where both of the users likes each other ( friendship )
我尝试了一些连接,但无法真正使其工作,是否有建筑AR功能来获得上述结果?

通过这种方式,你可以在用户之间建立关系,就像我用这个例子在媒体公司和hwo拥有这个媒体的公司之间建立关系(在我的例子中),媒体可以归a公司所有,a公司归B公司所有,这就是你获得自指关联的地方

在您的情况下,由于您需要用户模型,实现这一点要简单得多。。对我来说,需要做更多的修改。

通过这种方式,你可以在用户之间建立关系,就像我用这个例子在媒体公司和hwo拥有这个媒体的公司之间建立关系(在我的例子中),媒体可以归a公司所有,a公司归B公司所有,这就是你获得自指关联的地方


在您的情况下,由于您需要用户模型,实现这一点要简单得多。。对我来说,需要做更多的修改。

我想这就是你想要的:

或者,您可以尝试以下方法:

SELECT     a.user_id
FROM       likes AS a
INNER JOIN likes AS b
ON         a.user_id=b.likes_id
AND        a.likes_id=b.user_id

我想这就是你想要的:

或者,您可以尝试以下方法:

SELECT     a.user_id
FROM       likes AS a
INNER JOIN likes AS b
ON         a.user_id=b.likes_id
AND        a.likes_id=b.user_id

要补充jexact的答案,您可以使用AR实现这一点:

Like.joins('join likes l on likes.user_id=l.likes_id and l.user_id=likes.likes_id')

另一种(较慢?但imho看起来更干净)方法是在您的用户模型中执行此操作(未经测试,但应该会给您一个想法):

class用户:喜欢
有很多:liked_by,:foreign_key=>'likes_id',:class_name=>'Like'
拥有多个:追随者,:通过=>:喜欢,:来源=>:用户
def相互喜欢?(用户)
self.friends.include?(用户)和self.followers.include?(用户)
结束
结束

要添加到jexact的答案中,这是一种使用AR的方法:

Like.joins('join likes l on likes.user_id=l.likes_id and l.user_id=likes.likes_id')

另一种(较慢?但imho看起来更干净)方法是在您的用户模型中执行此操作(未经测试,但应该会给您一个想法):

class用户:喜欢
有很多:liked_by,:foreign_key=>'likes_id',:class_name=>'Like'
拥有多个:追随者,:通过=>:喜欢,:来源=>:用户
def相互喜欢?(用户)
self.friends.include?(用户)和self.followers.include?(用户)
结束
结束
我是用

 @groups = Like.select('l.*').joins('join likes l on likes.user_id=l.likes and   l.user_id=likes.likes')

  unless @groups.empty?
    @groups.each do |group|
      friendship = Friendship.create(user_id: group.user_id, friend_id: group.likes)
    end
  end
模型中的抽象性更好,我稍后会研究它,我用

 @groups = Like.select('l.*').joins('join likes l on likes.user_id=l.likes and   l.user_id=likes.likes')

  unless @groups.empty?
    @groups.each do |group|
      friendship = Friendship.create(user_id: group.user_id, friend_id: group.likes)
    end
  end

模型中的抽象更好,我稍后会研究它

好的,我看到了,但它使用:用户,友谊。我只是想检查一下模特们的喜好是否有相互关系。我真的不明白我怎么能把它连接起来,你能用我的单一模型“Like”澄清一下吗?Thxy你可以重命名它,还有链接,将它从“add friend”重命名为“Like friend”或简单的“Like”,反正这是同一模型用户的两条记录之间的关系,所以你需要使用自我参照联想在我的案例中,我有一个公司模式,一个公司可以与另一个公司作为所有者建立关系,所以我使用了一种称为公司关系而不是友谊的关系。。这不是一个复制粘贴代码,但你可以根据需要修改它。好的,我明白了,但它使用:用户,友谊。我只是想检查一下模特们的喜好是否有相互关系。我真的不明白我怎么能把它连接起来,你能用我的单一模型“Like”澄清一下吗?Thxy你可以重命名它,还有链接,将它从“add friend”重命名为“Like friend”或简单的“Like”,反正这是同一模型用户的两条记录之间的关系,所以你需要使用自我参照联想在我的案例中,我有一个公司模式,一个公司可以与另一个公司作为所有者建立关系,所以我使用了一种称为公司关系而不是友谊的关系。。这不是复制粘贴代码,但您可以根据需要修改它。在Ruby on rails中如何执行此原始SQL?在Ruby on rails中如何执行此原始SQL?