2011-02-15 11 views
15

¿Existe algún código de código abierto (o ejemplo) para Ruby on Rails que pueda filtrar, clasificar y paginar un determinado modelo? Además, sería genial si los resultados pudieran regresar a través de Ajax. Un buen ejemplo de lo que estoy buscando se puede ver en esta página web TruliaCualquier buen ejemplo/marco de Rails para clasificar, filtrar y paginar con Ajax

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

(Tenga en cuenta que como filtros se comprueban fuera, los resultados se actualizan sin una recarga la página.)

Este tipo de operaciones (filtro, clasificación, paginación) son tan comunes que alguien debe haber escrito algo para esto. Podría resolverlo yo mismo, pero espero que haya un código de ejemplo o una gema que proporcione las funciones que necesitaría. Y de nuevo, espero que se pueda hacer con Ajax usando jQuery o prototipo.

Gracias.

Respuesta

4

Para todas las cosas ajax, puede utilizar jQuery y simplemente añadir eventos a casillas de verificación, por ejemplo:

$(":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() 

    }) 
}) 

filtrado y la clasificación se puede hacer fácilmente con una consulta basada en los parámetros recibidos de la forma

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

y se puede utilizar will_paginate (https://github.com/mislav/will_paginate) para paginación. Es una gran joya

Debería actualizar la página en el archivo .js.erb que coincida con la acción del controlador, o en la devolución de llamada exitosa de la llamada ajax si usó dataType: "html".

9

Definitivamente, deberías consultar la lista de precios smart_listing gem (https://github.com/Sology/smart_listing).

Utiliza kaminari para la paginación y además de ordenar & filtrado, smart_listing también admite la edición in situ.

Aquí está a demo.

Cuestiones relacionadas