2012-03-25 13 views
18

¿Existe una forma elegante de implementar una clasificación de acciones asc y desc en las vistas/controlador en rieles?La mejor forma de implementar ordenación asc o desc en raíles

Lo que tengo es la vista index.html.erb común que enumera todos mis datos de cierto modelo y quiero agregar algunos botones pequeños (o hacer que el título se pueda seleccionar) para ordenar la lista ascendente o descendente de esa columna . Me pregunto si existe una forma elegante y eficiente de hacerlo o si simplemente agrego un nuevo controlador para cada columna (o botón) Quiero que esta acción suceda.

Respuesta

35

Aquí hay dos ejemplos que estoy usando. El primero con @plans es donde solo quiero ordenar un decimal del más bajo al más alto. El otro ejemplo es un poco más complicado en el que quiero pedir archivos de usuario desde el más nuevo al más antiguo. Luego usé una segunda variable para agrupar los archivos por la fecha de creación. Ambos ejemplos se realizaron en los controladores.

@plans = Plan.order("price") 

@files= @user.files.order("id DESC").all 
@dates = @files.group_by { |t| t.created_at } 

Para ver los botones en su vista, consulte el episodio de Railscast de Ryan Bates que cubre esta información.

http://railscasts.com/episodes/228-sortable-table-columns

+0

gracias, he usado el aproach Railscast – marimaf

+0

caso de este código implementarse en la vista, controlador o ayudante ? – sqrcompass

+1

Hacer '@ user.files.order (id:: desc)' es la forma más elegante de hacerlo si está escribiendo de forma estática. Si su dinámica es mucho mejor simplemente hacer '@ user.files.order (" # {criteria} # {direction} ")' – Lomefin

3

Recientemente he usado una joya llamada sorted con buenos resultados en caso de que quiera utilizar una solución pre-empaquetada para esta vez de desarrollar su propio.

https://github.com/mynameisrufus/sorted

-1

aquí es la relación de datos que muestra la forma en la que accedemos nombre al adherirse fin

@results = Result.has_pro.ascending(:name).page(params[:page]) 
Cuestiones relacionadas