2013-07-12 15 views
8

W przypadku większości modeli domyślna kolejność sortowania (id desc) jest w porządku. Ale w przypadku kilku zakresów w jednym z moich modeli, wysłałbym więcej, aby odwrócić zamówienie lub zamówienie w polu updated_at.Zmiana domyślnej kolejności sortowania w zakresie ActiveAdmin

Wydaje mi się, że nie można tego osiągnąć bez przerywania innej funkcjonalności, więc mam nadzieję, że ktoś inny może mnie nauczyć, jak to zrobić!

Próbowałem dodanie .order() na obiektach Wracam:

scope :example do |models| 
    models.order('id asc') 
end 

To nie wydaje się mieć żadnego wpływu.

Próbowałem również wykasować, jakie rodzaje prac. Sortuje moje obiekty tak, jak chcę, ale całkowicie łamie wszystkie funkcje filtrowania/wyszukiwania.

scope :example do |models| 
    models.unscoped.order('id asc') 
end 

Co robić?

+0

@ beck03076 Ten komentarz nie jest wcale konstruktywny. Jeśli nie masz odpowiedzi na swoje pytanie, nie musisz trwać. –

+1

@rogerkk https://github.com/gregbell/active_admin/issues/312 – ahmet

+0

Dzięki @ahmet, problemu tego nie znalazłem podczas korzystania z google. Próbowałem tam teraz sugestii, a kolejność sortowania wciąż jest przesłonięta. – rogerkk

Odpowiedz

7

użycie config.sort_order jak:

config.sort_order = "updated_at_desc" 
+2

O ile rozumiem, zmieni to kolejność sortowania na wszystkich zakresach. Chcę, aby niektóre z nich zostały posortowane inaczej. – rogerkk

4

Dlaczego nie zrobić 2 zakresy w modelu, jedną dla określonej kolejności sortowania, drugi, odwrócony, a następnie w ActiveAdmin ustawić jeden jako domyślny?

scope :example_asc, :default => true 
scope :example_desc 

Jeśli to nie zadziała, może tworzyć blok kontrolera w ActiveAdmin który określa, co próbujesz zrobić:

controller do 
    def asc 
    Model.order('id ASC') 
    end 
    def desc 
    Model.order('id DESC') 
    end 
end 

scope :example do |models| 
    asc 
end 

scope :example do |models| 
    desc 
end 

I wreszcie, myślę, że ta odpowiedź jest chyba dość dokładna: https://stackoverflow.com/a/17612718/175825

Ale warto zbadać więcej o tym, jak można zaimplementować sort_order:

Na co warto, nie jestem fanem chudych docs ActiveAdmin użytkownika. Powodzenia.

+8

+1 za nielubienie czegoś związanego z ActiveAdmin. – Ricky

1

Aby zmienić domyślną kolejność, należy użyć zmiany kolejności. Spróbuj tego!

scope :example do |models| 
    models.reorder('id asc') 
end 
+2

Problem z tym rozwiązaniem polega na tym, że niestety nie mogę ręcznie sortować według żadnej z kolumn w interfejsie użytkownika. – rogerkk

Powiązane problemy