我有2个型号
class User < AR has_many :friends end class Friend < AR # has a name column end
我需要找到所有与’Joe’和’Jack’都是朋友的用户
知道我怎么能在铁轨上做到这一点?
解决方法
一种选择是将每个名称作为单个INNER JOINS的参数.在sql中它将是这样的:
SELECT users.* FROM users INNER JOIN friends AS f1 ON users.id = f1.user_id AND f1.name = 'Joe' INNER JOIN friends AS f2 ON users.id = f2.user_id AND f2.name = 'Jack'
因为它是INNER JOINS,所以它只显示用户表可以用f1和f2连接的结果.
要在Rails中使用它,也许可以这样做:
class User < AR has_many :friends def self.who_kNows(*friend_names) joins((1..friend_names.length).map{ |n| "INNER JOIN friends AS f#{n} ON users.id = f#{n}.user_id AND f#{n}.name = ?" }.join(" "),*friend_names) }) end end
你可以这样打电话:
@users = User.who_kNows("Joe","Jack")
原文地址:https://www.jb51.cc/mssql/76690.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。