2011-12-05 12 views
10

Próbuję dodać porządek/ponowne zamówienie do zasobu w Aktywnym administratorze. Rozumiem, że możesz sortować według różnych kolumn w celu wyświetlenia podczas logowania. Chciałbym móc zamówić elementy, by wyświetlały się w określonej kolejności na interfejsie. Wszelkie pomysły, jak to osiągnąć?Aktywny administrator - udostępnij zasoby do określonego zamówienia na interfejsie użytkownika

Mam już kolumnę sortowania w bazie danych.

Chciałbym również wyświetlić elementy w tej określonej kolejności w sekcji administracyjnej.

Ktoś ma jakieś pomysły na to, jak to zrobię?

Odpowiedz

25

Zaimplementowałam to ostatnio używając kolumny o nazwie position w moim modelu 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 

Dodaj do Twoich JavaSkrypty 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

końcu się do realizacji tego. DZIĘKUJĘ CI!!!!!!! Pracował jak urok. –

+0

Dziękuję za odpowiedź :) – Awea

+0

Nie mogę uwierzyć, że to * to * łatwe! Kudos, kolego! – dimitarvp

0

Czy masz osobny kontroler frontendu? Dla części activeadmin twojego pytania:

Jest możliwe, aby mieć

config.sort_order = 'lastname_asc' 

lub

config.sort_order = 'created_at_desc' 

deklarację wewnątrz bloku ActiveAdmin.register swojego modelu/zasobu.

W modelu, można umieścić coś jak

default_scope :order => "id DESC" 

Czytając twoje pytanie, choć wydaje się właściwe, aby przeczytać jakąś dokumentację, Oto część kopiowane z 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 

który pozwala możesz wywołać takie metody:

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

Powodzenia.

Powiązane problemy