我们有“主题 - 关系 - 类别”。
也就是说,主题通过关系有很多类别。
我认为通过类别
获取主题非常容易 #Relationship Model
Topic_id: integer
Category_id: integer
@topics=Topic.joins(:relationships)
但是,并非每个主题都有一个类别。那么我们如何检索没有类别的主题呢? 是否有减号查询?
也许它看起来像@topics=Topic.where('id NOT IN (?)', Relationship.all)
我在activerecord equivalent to SQL 'minus'找到了它,但不确定这个解决方案。
答案 0 :(得分:11)
真的,作为一种关系会更好。认为这样可行:
@topics = Topic.joins('left join relationships on relationships.topic_id = topics.id').where('relationships.category_id is null')
或者这个:
@topics = Topic
.joins('left join relationships on relationships.topic_id = topics.id join categories on categories.id = relationships.category_id')
.group('topics.id').having('count(categories.id) = 0')
答案 1 :(得分:0)
我一直在寻找最简单的答案,我认为这是使用includes
。
topics = Topic.includes(:relationships).where(relationships: {id: nil})
另一种方式,更正确,让你认为SQL是LEFT OUTER JOINS
。
Topic.joins("LEFT OUTER JOINS relationships ON relationships.topic_id = topics.id")
.where(relationships: {id: nil})