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

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

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

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

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

Спасибо.

Ответы [ 3 ]

9 голосов
/ 28 мая 2014

Вы должны обязательно оформить драгоценный камень smart_listing (https://github.com/Sology/smart_listing).

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

Здесь демо .

7 голосов
/ 16 февраля 2011
4 голосов
/ 16 февраля 2011

Для всего, что касается 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".

...