2011-04-12 79 views
0

我想使用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標籤,但沒有找到結果。

任何想法?

在此先感謝!

回答

1

作品對我來說:

- if @applications.present? 
    %ul 
    - @applications.each do |application| 
     %li= application.name 
    %p= paginate @applications 
- else 
    %p No results found ... 

雷(0.12.3)