0

現在、次の 3 つのモデルがあります。

  • タグ (habtm: 投稿)
  • 投稿 (habtm: タグと画像が多い)
  • 画像(投稿に属します)

私が欲しいのは、 tag-controller 、 tag と関係のあるすべての投稿を取得することです。これは、いくつかの画像と関係があります。

のようなもの:

Tag.posts.where("images").nil?(もちろん、これは好きではありませんが、私がどこに向かっているのか見ていただければ幸いです)

まず、私は Rails を初めて使用し、モデルに対してクエリ条件を実行したことがありません (*.all または *.find のみ)。

もちろん、タグに属するすべての投稿を取得し、投稿をループして、画像に関係のない投稿を削除することもできますが、それは正しくないようです ;)

*編集:
おそらく私は不明確でした。投稿と関係があるすべてのタグ(Tags.all())を取得したいと思います。それは画像と関係があります。
より似ています: Tags.all.posts.images != null ;) *

4

2 に答える 2

0

次の方法で実行できます。

Tag.joins(posts: :images)

これにより、画像を含む投稿を持つすべてのタグが読み込まれます。

于 2013-11-12T07:19:52.183 に答える
0

関連するレコードの存在を確認するのは SQL では簡単ですが、Rails には私の知る限り「簡単な」構文はありません。単純な結合の問題は、n 個の画像を持つ投稿が結果セットに n 回表示されることです。結果に対して個別を実行できますが、データ セットが増えるとますます効率が低下します。

Tag.joins(:posts).where("exists (select null from images where images.post_id = posts.id)")

同様に、画像のない投稿のタグ:

Tag.joins(:posts).where("not exists (select null from images where images.post_id = posts.id)")
于 2013-11-12T07:44:30.763 に答える