我正在使用 Ruby on Rails 3.2.9 和WillPaginate 3.0 ruby gem。正如 Internet 上的许多资源所指出的那样(请继续阅读以获取更多信息),当涉及“复杂”关联/范围方法时,使用 WillPaginate gem计算对象似乎无法按预期工作,因为这个问题使它在相关视图中生成错误数量的页面链接。在我的情况下,问题类似于this和this。
在我的模型课Article
中,我有:
has_many :category_associations
has_many :categories, :through => :category_associations
在相关的控制器ArticleControllers
中,我有:
@article
.categories
.scope_method(...)
.order_method
.search_method(...)
.paginate(:page => 1, :per_page => 10)
互联网上提出的解决方案是:
第 1 条:解决方法是这样添加count
条件:
@article =
<...> # Same as above.
.paginate(:per_page => 4, :page => params[page], :count => {:group => 'articles.id'})
第 2 条:解决方案是手动计数对象并以total_entries
这种方式设置选项:
# Note: The below code is performance less since a further SQL query is executed.
total_entries = ... # Pre-count the amount of objects, as needed (note: in this code line it is executed a SQL query to the database).
@article =
<...> # Same as above.
.paginate(:per_page => 4, :page => params[page], :total_entries => total_entries)
我尝试使用上述所有解决方案,但我想了解与 WillPaginate gem 相关的“内部”问题可能是什么(以便我可以调整它)以及我应该如何继续正确解决我的问题(对于例如,什么是“最佳”解决方案?除了上述解决方案之外,还有其他解决方案吗?)。
例如,我想避免使用上面介绍的“被黑”解决方案,而是以paginate
“常见”方式使用该方法:@articles.<...>.paginate(:per_page => 4, :page => params[page])
.