Rails如何通过关联的id包含数组来查找记录

时间:2014-05-20 08:41:20

标签: sql ruby-on-rails

当然has_and_belongs_to的has_many标签,现在给出了两个id标签,[1,2],如何查找具有这两个标签的所有课程

Course.joins(:tags).where("tags.id IN (?)" [1, 2])将返回包含标记之一的记录,而不是我想要的记录

# app/models/course.rb
has_and_belongs_to_many :tags



# app/models/tag.rb
has_and_belongs_to_many :courses

2 个答案:

答案 0 :(得分:6)

由于您正在使用PostgreSQL,而不是使用IN运算符,您可以使用ALL运算符,如下所示:

Course.joins(:tags).where("tags.id = ALL (?)", [1, 2])

这应该使用AND而不是OR来匹配所有ID。

答案 1 :(得分:3)

这不是单个请求,但可能仍然与其他解决方案一样快,并且可以适用于任意数量的标记。

tag_ids = [123,456,789,876] #this will probably come from params
@tags = Tags.find(tag_ids)
course_ids = @tags.inject{|tag, next_tag| tag.course_ids & next_tag.course_ids} 
@courses = Course.find(course_ids)