2

投稿とカテゴリを持つ has_and_belongs_to_many 関係があるとします。カテゴリ内のすべての投稿、または特定の投稿がメンバーであるすべてのカテゴリを簡単に見つけることができます。しかし、複数のカテゴリに属する​​投稿のリストを見つけたい場合はどうすればよいでしょうか? たとえば、Rails のセキュリティに関するトピックの投稿のリストでは、「セキュリティ」と「Rails」のカテゴリに属する​​投稿が必要になる場合があります。

ActiveRecord に組み込まれているファインダー メソッドでこれを行うことは可能ですか? それとも SQL を使用する必要がありますか? 誰かがその方法を説明してもらえますか?

4

2 に答える 2

0

includesまたはjoinsを次のように使用できます。

@result = Post.includes(:categories).where("categories.name = 'Security' OR categories.name = 'Rails'")

また

@result = Post.joins(:categories).where("categories.name = 'Security' OR categories.name = 'Rails'")

このrailscastをチェックして と の違いを理解することもjoinsお勧めしincludesます。

于 2012-07-22T09:03:43.287 に答える
0

Railsについては何も知りませんが、SQLで同様のことを試みています。これは、私たちのどちらにとってもうまくいくかもしれないし、うまくいかないかもしれません....

記事のテーブルと、適用されたカテゴリのルックアップ テーブルがあります。「セキュリティ」カテゴリと「レール」カテゴリを持つ記事を取得するために、もちろん、記事テーブルをカテゴリ テーブルに結合しますが、2 回目に再結合します。カテゴリ テーブルの各結合では、テーブル エイリアス名 (つまり、言語またはトピック) 擬似コードでヒントが使用されます。

SELECT article.*,
category_language.category_id,
category_topic.category_id

FROM category category_language
INNER JOIN article ON category_language.articleID = article.articleID 
INNER JOIN category category_topic ON article.articleID = category_topic.articleID 

WHERE category_language.category_id in (420) /* rails */
and category_topic.category_id in (421) /* security */

これは完全に解決されたわけではありません。ここで私の無知を示​​している場合は、誰かが声を上げてくれることを願っています.

于 2012-10-19T19:30:39.763 に答える