2011-12-05 6 views
10

Estoy tratando de agregar pedidos/reordenar a un recurso en Active Admin. Entiendo que puede ordenar por las diferentes columnas para verlas mientras está conectado. Lo que me gustaría hacer es poder pedir elementos para que se muestren en un orden específico en el frente. ¿Alguna idea sobre cómo lograr esto?Administrador activo: crea un recurso que se puede ordenar para pedidos específicos en el front-end

Ya tengo una columna de ordenación en la base de datos.

También me gustaría mostrar los artículos en ese orden específico en la sección de administración.

¿Alguien tiene alguna idea sobre cómo lograr esto?

Respuesta

25

Implementé esto recientemente utilizando una columna llamada posición en mi modelo HomeSlide.

ActiveAdmin.register HomeSlide do 
    config.sort_order = 'position_asc' 

    index do 
    column :title 
    default_actions 
    end 

    # This action is called by javascript when you drag and drop a column 
    # It iterates through the collection and sets the new position based on the 
    # order that jQuery submitted them 
    collection_action :sort, :method => :post do 
    params[:home_slide].each_with_index do |id, index| 
     HomeSlide.update_all(['position=?', index+1], ['id=?', id]) 
    end 
    render :nothing => true 
    end 

end 

Agregar a su javascript active_admin (coffeescript)

sendSortRequestOfModel = (model_name) -> 
    formData = $('#' + model_name + ' tbody').sortable('serialize') 
    formData += "&" + $('meta[name=csrf-param]').attr("content") + "=" + encodeURIComponent($('meta[name=csrf-token]').attr("content")) 
    $.ajax 
    type: 'post' 
    data: formData 
    dataType: 'script' 
    url: '/admin/' + model_name + '/sort' 

jQuery ($) -> 

    # home page slides 
    if $('body.admin_home_slides.index').length 
    $("#home_slides tbody").disableSelection() 
    $("#home_slides tbody").sortable 
     axis: 'y' 
     cursor: 'move' 
     update: (event, ui) -> 
     sendSortRequestOfModel("home_slides") 
+0

Finalmente se decidió a implementar esto. ¡¡¡¡¡¡¡GRACIAS!!!!!!! Trabajado como un encanto. –

+0

Gracias por su respuesta :) – Awea

+0

No puedo creer que fuera * que * ¡fácil! Felicitaciones, amigo! – dimitarvp

0

¿Tiene un controlador frontend por separado entonces? Para la parte activeadmin de su pregunta:

Es posible tener un

config.sort_order = 'lastname_asc' 

o

declaración
config.sort_order = 'created_at_desc' 

dentro del bloque ActiveAdmin.register de su modelo/recurso.

En su modelo, se puede poner algo así como

default_scope :order => "id DESC" 

La lectura de su pregunta, sin embargo, parece apropiado para que lo lea algún tipo de documentación, aquí está una parte copiada de http://api.rubyonrails.org/classes/ActiveRecord/NamedScope/ClassMethods.html

class Article < ActiveRecord::Base 
    scope :published, where(:published => true) 
    scope :featured, where(:featured => true) 

    def self.latest_article 
    order('published_at desc').first 
    end 

    def self.titles 
    map(&:title) 
    end 

end 

cual permite usted puede llamar a los métodos de esta manera:

Article.published.featured.latest_article 
Article.featured.titles 

Buena suerte.

Cuestiones relacionadas