【发布时间】:2016-05-14 07:07:43
【问题描述】:
我有一些帖子,每个帖子都有很多标签。
我需要创建一个查询来匹配那些不具有数组中确切标签的帖子。
它还应该返回所有没有标签的帖子。
这是我尝试过的:
query = posts.joins('LEFT JOIN post_tags ON post.id = post_tags.post_id')
no_tags = ['test', 'test1']
query = query.where('post_tags.name NOT IN (?) OR post_tags.name IS ?', no_tags, nil) if no_tags
这给了我所有没有标签的帖子,这是正确的,它也给了我没有指定标签的帖子,并且没有其他标签,这也是正确的.
问题是如果一个帖子有多个标签,比如test, another,它会在查询中返回它,这不是我想要的行为。
我需要过滤掉这些帖子,如果一个帖子有一个标签在数组中,是否包含另一个标签。
例子:
post1 has tag `test`
post2 has tag `another`
post3 has tags `test, another`
post4 has no tags
它应该返回:
[post2, post4]
但现在它返回了:
[post2, post3, post4]
【问题讨论】:
标签: ruby ruby-on-rails-4 activerecord ruby-on-rails-3.2