假设我们有“主题-关系-类别”。

即,主题具有通过关系的多个类别。

我认为很容易获得具有类别的主题

  #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'中找到它,但不确定该解决方案。

最佳答案

真的会更好。认为这会起作用:

@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')

07-24 09:16