Рельсы 3 + ленивая загрузка + каминари для пагинации + хамл - PullRequest
0 голосов
/ 13 апреля 2011

Я хотел бы использовать камень каминари для разбивки на страницы результатов поиска.Поскольку гем не «загрязняет» ActiveRecord :: Base и Array, на самом деле kaminari - мой предпочтительный путь (с архитектурной точки зрения).К сожалению, есть Rails 3 и его ленивая концепция загрузки, которая немного сбивает с толку (по крайней мере, в моем сценарии).

В моем HAML-шаблоне я хотел бы перечислить все свои результаты поиска.Когда набор результатов пуст, я хочу отобразить сообщение, сообщающее пользователю, что никаких результатов не найдено.В прошлом я мог сделать следующее:

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

= paginate @results

С .empty?загрузка без принудительной загрузки, очевидно, больше не работает в Rails 3. Jep, я мог бы использовать .all в своем Query для принудительной загрузки.К сожалению, .all возвращает Array, и помощник View по kaginari не работает с Arrays (правильная философия imho).Мне любопытно, как бы вы справились с такой ситуацией.Какие-нибудь лучшие практики?Все мои попытки заканчивались уродливыми конструкциями (как показано ниже).: /

Чтобы немного прояснить ситуацию:

Действие My Controller:

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 Ответ

1 голос
/ 28 апреля 2011

у меня работает:

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

с каминари (0.12.3)

...