2016-09-14 32 views
0

型号:Rails的一个一对多的关联查询

class User < ActiveRecord::Base 
    has_may :friends 
end 

class Friend < ActiveRecord::Base 
    belongs_to :user 
end 

表:

tables image

要查询:

users其中既有:

friends.name = "Lily" 
# and 
friends.name = "Steven" 

我想模型,其中查询,如:

User.joins(xxx).where(xxx) 

有什么办法呢?

回答

0

我觉得

User.joins(:friends).where("friends.name = 'Lily' OR friends.name = 'Steven'") 

会做你在找什么

+0

没有,如果有朋友在10日的纪录:11 3百合,结果将是不正确的。 –

+0

我没有得到你的。究竟你的意思是“在朋友10日的记录:11月3日百合,结果将是不正确的。” –

0
SELECT users.id, users.name 
FROM users 
INNER JOIN friends ON users.id = friends.user_id 
WHERE friends.name IN ('Lily', 'Steven') 
GROUP BY users.id 
HAVING COUNT(*) = 2; 

ActiveRecord的查询

names = ['Lily', 'Steven'] 

User.select('users.id, users.name').joins(:friends).where(friends: { name: names }).group('users.id').having("COUNT(*) = #{names.count}") 

SQLFiddle

上面的查询将返回唯一的日谁是朋友"Lily""Steven"ē用户