当然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
答案 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)