我将 will_paginate 与博客文章和标签之间的 HABTM 关系一起使用。每当我应用分页时,都会显示重复的帖子,因为 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 中的错误)
编辑:这似乎也是 Kaminari 的问题。