【发布时间】:2014-12-27 22:47:54
【问题描述】:
在我的 Rails 4 应用程序中,我的博客和类别之间存在多对多关系,其中包含一个 has_many :through => 连接表。
我正在使用 gem will_paginate 对博客文章的页面进行分页。
但是,对于每一页,我想显示与每页显示的每篇博文相关的独特类别。目前我有一个类似的查询:
Category.joins(:blogs).paginate(page: params[:page], per_page: 20).uniq
这对第一页很有效,但对于第二页,当 params[:page] == 2 时,结果是一组空的类别,即使第二页包含带有类别的博客文章。
我该如何解决这个问题?
编辑:
行动:
def home
@categories = Category.joins(:blogs).paginate(page: params[:page], per_page: 20).uniq
@blogs = Blog.paginate(page: params[:page], per_page: 20)
respond_to do |format|
format.html
end
end
部分显示类别:
<ul class="filter">
<li><a class="active" href="" data-filter="*">All</a></li>
<% @categories.each do |category| %>
<li><a href="#" data-filter=".<%= category.title.downcase unless nil %>"><%= category.title unless nil %></a></li>
<% end %>
</ul>
与操作中填充的博客和类别的集合相比,这里的部分逻辑不太相关。
【问题讨论】:
-
我认为您在博客中使用的类别少于 20 个,不是吗?
-
该参数只是指定每页需要多少个,当没有 20 个时它只返回最后一页的剩余部分。
-
是的,因为我认为您的查询必须有效。你在控制台测试过吗?第 1 页和第 2 页。
-
是的,很多次。它非常适合页面:1 但不是 2
-
在控制台运行这个:
Categories.joins(:blogs).size和Categories.joins(:blogs).uniq.size
标签: ruby-on-rails ruby join activerecord will-paginate