[英]Rails 3 + lazy loading + Kaminari for pagination + HAML
我想使用kaminari寶石對搜索結果進行分頁。 由於gem不會“污染” ActiveRecord :: Base和Array,因此kaminari實際上是我首選的處理方式(從體系結構的角度來看)。 不幸的是,Rails 3及其延遲加載概念使事情有些混亂(至少在我的情況下)。
在我的HAML模板中,我想列出所有搜索結果。 當結果集為空時,我想顯示一條消息,告訴用戶未找到結果。 過去,我可以執行以下操作:
- unless @results.empty?
... search results ...
- else
... no results found ...
= paginate @results
由於.empty? 不會強制加載,這顯然在Rails 3中不再起作用。Jep,我可以在查詢中使用.all強制加載。 不幸的是,.all返回一個Array,而kaminari的分頁式View助手無法與Arrays一起使用(正確的哲學恕我直言)。 我很好奇您將如何處理這種情況。 有最佳做法嗎? 我所有的嘗試都以丑陋的結構(如下面的結構)告終。 :/
為了使事情更清晰:
我的控制器動作:
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-tag。
有任何想法嗎?
提前致謝!
為我工作:
- if @applications.present?
%ul
- @applications.each do |application|
%li= application.name
%p= paginate @applications
- else
%p No results found ...
與kaminari(0.12.3)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.