RoRで多対多の関係(has_many through:
)に関する簡単な質問があります。だから私は多くのTag
とその逆を持っているTweet
モデルを持っています。Railsでクエリをフィルタリングするhas_many〜
あなたはタグですべてのつぶやきを表示するインデックスアクションとビューを持っていますが、タグによるフィルタリングもあります。 Tweet
にはタグが付いていないという少しの詳細もあります。
は、だから私はこのような何かを行う場合:あなたはその後、フィルタする場合
Tweet.includes(:tags).where(tags: { name: #2017 })
は、あなたがTweet
にあった、すべてのタグを使用すると、フィルタ処理することを、タグのみを取得しますが、ありませんよ。 F.e. Tweet
にタグ#2017, #2016, #2015
がある場合、最後には#2017
のみ表示されます。
だから、このような何かをやって問題を解決することができます
Tweet.joins(:tags).where(tags: { name: #2017 })
しかし、インデックスページにフィルタがない場合は、すべてのツイートが表示され、タグのないイベントが表示されます。
もちろん、タグのパラメータが存在するかどうかをチェックするようなハックを行うことができます。Tweet.joins
else do Tweet.includes
。
1つのクエリ内でこれを行う方法はありますか?これの背後にある仕組みはなんですか?私はwhere
クエリのようなものを持っているときに、のロジックを理解しています。それは中間テーブルにtweet_id
と 'tag_id'だけをマップしてからこのIDをTag
テーブルにマップするからです。しかし、なぜINNER JOIN
でそれは私にすべてのタグを与え続けている、私に質問を与える。
ありがとうございます。