Любой хороший пример Rails/рамки для сортировки, фильтрации, разбиения на страницы с помощью Ajax

Есть ли какой-либо код с открытым исходным кодом (или пример) для Ruby on Rails, который может фильтровать, сортировать и разбивать страницы на определенную модель? Также было бы здорово, если бы результаты вернулись через Ajax. Хороший пример того, что я ищу, можно увидеть на этой веб-странице Trulia.

http://www.trulia.com/for_sale/30000-1000000_price/10001_zip/

(Обратите внимание, что по мере удаления фильтров результаты обновляются без перезагрузки страницы.)

Эти виды операций (фильтр, сортировка, paginate) настолько распространены, что кто-то должен что-то написать для этого. Я мог понять это сам, но надеюсь, что есть либо пример кода, либо драгоценный камень, который предоставляет функции, которые мне нужны. И снова я надеюсь, что это можно сделать с помощью Ajax, используя либо jQuery, либо прототип.

Спасибо.

Ответы

Ответ 2

Вы должны обязательно проверить smart_listing gem (https://github.com/Sology/smart_listing).

Он использует kaminari для разбивки на страницы, и кроме сортировки и фильтрации, smart_listing поддерживает также редактирование на месте.

Здесь демо.

Ответ 3

Для всего содержимого ajax вы можете использовать jquery и просто добавлять события к флажкам, например:

$(":checkbox").change(function() {
    var form = $(this).closest("form");

    form.submit() // if you use the jquery form plugin http://jquery.malsup.com/form/

    //or
    $.ajax({
        url: form.attr("action"),
        type: "POST",
        dataType: "script",
        data: form.serialize()

    })
})

Фильтрация и сортировка могут быть легко выполнены с запросом на основе параметров, полученных из формы

Model.where(...).order(...).paginate(:per_page => 1, :page => params[:page])

и вы можете использовать will_paginate (https://github.com/mislav/will_paginate) для разбивки на страницы. Это отличный камень.

Вы либо обновите страницу в файле .js.erb, соответствующем действию контроллера, либо в обратном вызове вызова ajax, если вы использовали dataType: "html".