Разбивка результатов поиска с помощью Kaminari - PullRequest
0 голосов
/ 02 апреля 2011

Я пытался сделать это последние 2 часа безуспешно, я уверен, что это что-то действительно простое:)

Итак, у меня есть форма, где пользователи могут искать вещи по некоторым ключевым словам.,Вот код формы:

<%= form_tag search_by_description_path,:method => "get" do %>
        <div class="column span-3">
            <label>Search</label>
        </div>

        <div class="column span-5">
            <input type="text" name="search_keywords" id="search_keywords"/>
        </div>

        <div class="column span-6">
            <%= collection_select :category,:id,Category.all,:id,:name,:include_blank => "Everything" %>
        </div>

        <div class="column span-3">
            <%= submit_tag "search" %>
        </div>

    <% end %>

У меня есть это в routes.rb:

get "search_by_description" => "search#search_by_description",:as => "search_by_description"

У меня это в контроллере:

def search_by_description
    category    = params[:category_id]
    kw          = params[:search_keywords]
    @results = Posts.where("description LIKE ?","%#{kw}%").page(params[:page])
end

Игнорироватьтот факт, что я не слежу за category_id.На мой взгляд, у меня есть это:

<%= render "results",:locals => {:results => @results} %>
<%= paginate(@results) %>

Проблема в том, что когда я перехожу на вторую страницу, я не вижу ничего отображаемого.Посмотрев в консоль, я заметил, что для 1-й страницы генерируется следующий SQL:

 SELECT "posts".* FROM "posts" WHERE (description LIKE '%lorem%') ORDER BY id LIMIT 25 OF
SELECT COUNT(*) FROM "posts" WHERE (description LIKE '%lorem%')

, а для второй:

SELECT COUNT(*) FROM "posts" WHERE (description LIKE '%lorem%') LIMIT 25 OFFSET 25

Пожалуйста, дайте мне несколько советов,Я не хочу прибегать к написанию собственной нумерации страниц:)

Ответы [ 2 ]

4 голосов
/ 05 мая 2011

Основной причиной этой проблемы является ошибка ActiveRecord 3.0, которая будет исправлена ​​в ActiveRecord 3.1 https://github.com/rails/rails/commit/d5994ee https://github.com/rails/rails/commit/28c73f0

И я сделал патч для Kaminari для работы с ActiveRecord 3.0https://github.com/amatsuda/kaminari/blob/9d0eebe38e2a22fb8100e491a6d94839d76c868f/lib/kaminari/models/active_record_relation_methods.rb#L7-11

Короче говоря, обновление вашего драгоценного камня Kaminari до новейшего исправит вашу проблему.Спасибо!

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

Это была ошибка или неправильное использование с моей стороны.У меня было это в моем представлении:

<% if results.size > 0 %>
   ...
<% else %>
   <p>No results found</p>
<% end %>

, и это всегда происходило в предложении else для страниц, отличных от первого.Если я изменю results.size на results.all.size, это будет работать.Однако я не понимаю, почему он не работает напрямую с results.size.

...