Rails 3 +延迟加载+ Kaminari分页+ HAML
问题描述:
我想使用kaminari gem来分页搜索结果。由于gem不会“污染”ActiveRecord :: Base和Array,因此kaminari实际上是我首选的方式(从架构角度来看)。不幸的是,Rails 3和它的延迟加载概念使得事情有点混乱(至少在我的情况下)。Rails 3 +延迟加载+ Kaminari分页+ HAML
在我的HAML模板中,我想列出所有的搜索结果。当结果集为空时,我想显示一条消息,告诉用户未找到结果。在过去,我可以做到以下几点:
- unless @results.empty?
... search results ...
- else
... no results found ...
= paginate @results
因为.empty?不强制加载这显然不再在Rails 3中工作。Jep,我可以在我的查询中使用。强制加载。不幸的是,所有返回一个Array和kaminari的分页View辅助函数不能与Arrays(正确的哲学imho)一起使用。我很好奇你将如何处理这种情况。任何最佳实践?我所有的尝试都以丑陋的结构结束(如下图)。 :/
为了让事情更清楚一点:
我的控制器动作:
helper_method :keys
def groups
@results = []
if params[:query].present?
@results = Group.public
.where({:body.matches_any => keys} | {:subject.matches_any => keys})
.order('groups.updated_at DESC')
.page(params[:page])
.per(1)
end
respond_to do |format|
format.html
end
end
我的 “丑陋” HAML,模板:
%h1= "Search results for \"#{params[:query]}\""
%br
%ol
- @results.each do |group|
%li
= link_to group.subject, group
%br
= group.body
%br
= group.created_at
- if @results.empty?
%div No results found ...
- else
=paginate(@results)
这里的问题:它会创建一个ol标签,但没有找到结果。
任何想法?
在此先感谢!
答
作品对我来说:
- if @applications.present?
%ul
- @applications.each do |application|
%li= application.name
%p= paginate @applications
- else
%p No results found ...
与雷(0.12.3)