簡體   English   中英

Rails 3 +延遲加載+ Kaminari分頁+ HAML

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM