6

たとえば、「トピック - 関係 - カテゴリ」があるとします。

つまり、Topic has_many のカテゴリは関係によって異なります。

カテゴリでトピックを取得するのは非常に簡単だと思います

  #Relationship  Model
  Topic_id: integer
  Category_id: integer

  @topics=Topic.joins(:relationships)

ただし、すべてのトピックにカテゴリがあるわけではありません。では、カテゴリのないトピックを取得するにはどうすればよいでしょうか。マイナスクエリはありますか?

おそらく、SQLの「マイナス」に相当するactiverecord@topics=Topic.where('id NOT IN (?)', Relationship.all) で見つけたように見えますが、この解決策についてはわかりません。

4

2 に答える 2

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')
于 2013-03-23T15:26:10.280 に答える