1

ブログ投稿とタグの間の 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のバグです)

編集:これはカミナリの問題でもあるようです.

4

1 に答える 1

6

私は以前にこの問題に遭遇したと思います。これをクエリに追加してみてください。

.group("id")

これはwill_paginateのバグではありません。これは、提供されたデータを取得してビューにページ分割するだけだからです。解決策は、提供するデータにあります。

于 2012-07-31T05:30:20.497 に答える