0

kaminari gem を使用して、検索結果のページネーションを行いたいと考えています。gem は ActiveRecord::Base と Array を「汚染」しないため、実際には (アーキテクチャの観点から) カミナリが私の好みの方法です。残念ながら、Rails 3 とその遅延読み込みの概念があり、少し混乱を招きます (少なくとも私のシナリオでは)。

HAML テンプレートで、すべての検索結果を一覧表示したいと考えています。結果セットが空の場合、結果が見つからないことをユーザーに知らせるメッセージを表示したいと考えています。過去には、次のことができました。

- unless @results.empty?
  ... search results ...
- else
  ... no results found ...

= paginate @results

以来 .empty? これはRails 3では明らかに機能しません.Jep、クエリで.allを使用してロードを強制できます。残念ながら、.all は配列を返し、kaminari の paginate View ヘルパーは配列では機能しません (正しい哲学の私見)。このような状況にどのように対処するのか興味があります。ベストプラクティスはありますか? 私の試みはすべて醜い構造で終わった(下のような)。:/

物事をもう少し明確にするために:

私のコントローラーアクション:

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 が作成されます。

何か案は?

前もって感謝します!

4

1 に答える 1