私は単純なブログアプリケーションをやっています - posts_tags テーブルを介して多くのタグを持つ投稿があります (私のモデルは以下にあります)。私が実装したのは、ユーザーがタグをクリックすると、そのタグが付いた投稿だけが表示されるということです。私が望むのは、ユーザーが別のタグを選択できるようにすることであり、それらのタグの両方、次に 3 番目、4 番目などを持つ投稿のみにフィルター処理されます。アクティブなレコードを作成するのが困難ですクエリ - 特に動的。私が得た最も近いものを以下に示しますが、それは純粋な SQL であり、複雑であっても、少なくとも ActiveRecord Rubyland 構文で使用したいと考えています。
また、「カウント2を持つ」は機能せず、「カウント」が存在しないと言って、名前を付けても。しかし、それは私のテーブルに出力されています(カウントの背後にある考え方は、検索しているタグの数と同じ数が含まれている場合、理論的/理想的にはすべてのタグを持っているということです)
現在のテスト SQL クエリ
select posts_tags.post_id,count(*) from posts_tags where tag_id=1 or tag_id=3 group by post_id ### having count=2
テスト SQL からの出力 (多くは含まれていませんが、いくつかの単純なシード データのみが含まれていることはわかっています)。
post_id | count
---------+-------
1 | 2
2 | 1
私のモデル: /post.rb
class Post < ActiveRecord::Base
has_many :posts_tags
has_many :tags, :through => :posts_tags
end
/tag.rb
class Tag < ActiveRecord::Base
has_many :posts_tags
has_many :posts, :through => :posts_tags
end
/poststag.rb
class PostsTag < ActiveRecord::Base
belongs_to :tag
belongs_to :post
end