私の現在のデータベース構造は、多くのタグで構成される場所があるということです。ユーザーが検索ボックスに入力するすべてのタグを含む場所を検索できるようにしたい。私の現在のコードは次のようになり、それが唯一の指定されたタグの少なくとも1つを持っている場所を見つける:配列のすべての要素を含むエントリを見つける
tags = params[:tags]
Place.find(:all, :include => [:tags], :conditions => ['places.id IN
(SELECT place_id FROM
(SELECT place_id, count(place_id) AS tags_count FROM places_tags WHERE tag_id IN
(SELECT id FROM tags WHERE title IN (?))
GROUP BY place_id) AS count_table
WHERE tags_count = ?)', tags, tags.size])
は説明:最初に数え、その後、アレイ内のすべてのタグを見つける
tags = params[:tags]
Place.find(:all, :include => [:tags], :conditions => ['tags.title IN (?)', tags])
あなたが必要とする関係演算子は、[すべての部品を供給するサプライヤ]として広く知られている[division](http://en.wikipedia.org/wiki/Relational_algebra#Division_.28.C3.B7.29)です。 ](http://www.dbdebunk.com/page/page/772076.htm)。ビジネスアナリストまたはドメインエキスパートに、[剰余との正確な除算または除算](http://www.simple-talk.com/sql/t-sql-programming/divided-we-stand-the- sql-of-relational-division /)と空のdivisiorを扱う方法(たとえば、すべてのサプライヤが空のパーツリストを用意していますか?) – onedaywhen
関係部門(http://luhong.wordpress.com/2006/03/05/relational-division-in-sql/)を探しているようです。これは恐らく醜いコードとほとんど読めないコードに変わるでしょう。それ以外の場合は、名前付きスコープ(またはrails3の場合はスコープ)を定義し、タグを繰り返してすべてのタグと一致しない場所を除外するだけです。しかし、ActiveRecordはSQLクエリを実際に何度も実行することがありますが、これはサイトの速度が低下する可能性があるため、おそらくあなたが望むものではありません。 – Frost