Rails will_paginate在HABTM模型上显示重复项

时间:2012-07-30 21:22:02

标签: ruby-on-rails activerecord will-paginate

我正在使用will_paginate与Blog帖子和标签之间的HABTM关系。每当我应用分页时,我都会显示重复的帖子,因为Rails中的HABTM不会保持数据库的唯一性,它会在进行查询时应用唯一性。

blog_posts.rb

has_and_belongs_to_many :tags, :uniq => true

tag.rb

has_and_belongs_to_many :blog_posts, :uniq => true

根据ActiveRecord的documentation,:uniq不会阻止存储重复的关系,它只是在构建查询时忽略它们。

以下是问题: tag = Tag.find(1) tag.blog_posts.count等于1,但是: tag.blog_posts.page(nil).count等于3,并且所有3个都是同一帖子的副本。正确的行为应该只显示1,而不是重复。

我知道我可以复制这里生成的SQL查询并以这种方式修复它,但这似乎不是一个好的解决方案。有人可以帮我解决潜在的问题吗? (虽然我担心这是will_paginate中的一个错误)

编辑:这似乎也是Kaminari的一个问题。

1 个答案:

答案 0 :(得分:5)

我想我以前遇到过这个问题。尝试将此添加到您的查询中:

.group("id")

这不是will_paginate中的错误,因为所有这一切都是获取它为您提供的数据并在视图中对其进行分页。解决方案在于您提供的数据。