Я хотел бы использовать камень каминари для разбивки на страницы результатов поиска.Поскольку гем не «загрязняет» 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-тег, хотя результатов не найдено.
Есть идеи?
Заранее спасибо!