ブログ投稿とタグの間の HABTM 関係で will_paginate を使用しています。Rails の HABTM はデータベースを一意に保たず、クエリの作成時に一意性を適用するため、ページネーションを適用するたびに投稿が重複して表示されます。
blog_posts.rb
has_and_belongs_to_many :tags, :uniq => true
タグ.rb
has_and_belongs_to_many :blog_posts, :uniq => true
ActiveRecordのドキュメントによると、:uniq は重複したリレーションシップが格納されるのを防ぎません。クエリを作成するときにそれらを無視するだけです。
問題は次のとおり
tag = Tag.find(1)
tag.blog_posts.count
です。1 に
tag.blog_posts.page(nil).count
等しいが、3 に等しく、3 つすべてが同じ投稿の重複です。正しい動作は、重複ではなく、1 つだけを表示することです。
ここで生成されている SQL クエリをコピーしてそのように修正できることはわかっていますが、それは良い解決策ではないようです。誰かが根本的な問題を解決するのを手伝ってくれますか? (心配ですが、will_paginateのバグです)
編集:これはカミナリの問題でもあるようです.