2013-07-12 2 views
8

Per la maggior parte dei modelli, l'ordinamento predefinito (id desc) va bene. Ma per un paio di ambiti su uno dei miei modelli, farebbe più invio per invertire l'ordine, o ordine dal campo updated_at.Modifica ordine di ordinamento predefinito in ambito ActiveAdmin

Non riesco a raggiungere questo obiettivo senza rompere altre funzionalità, quindi spero che qualcun altro possa insegnarmi come farlo!

Ho provato ad aggiungere un .order() sugli oggetti Sto tornando:

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

Questo non sembra avere alcun effetto.

Ho anche provato a non schermare, che tipo di lavori. Ordina i miei oggetti come voglio, ma rompe completamente tutte le funzionalità di filtro/ricerca.

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

Cosa fare?

+0

@ beck03076 Questo commento non è affatto positivo. Se non hai la risposta alla sua domanda, non c'è bisogno di troll. –

+1

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

+0

Grazie a @ahmet, non ho trovato il problema durante la ricerca su google. Ho provato i suggerimenti lì ora, e l'ordinamento è ancora sovrascritto in qualche modo. – rogerkk

risposta

7

uso config.sort_order come:

config.sort_order = "updated_at_desc" 
+2

Per quanto ho capito, questo cambierà l'ordinamento su tutti gli ambiti. Voglio che alcuni di loro siano ordinati in modo diverso. – rogerkk

4

Perché non fare 2 portate nel modello, uno per un particolare tipo di ordinamento, l'altra, invertito, poi in ActiveAdmin impostare uno come predefinito?

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

Se questo non funziona per voi, forse creare un blocco controllore in ActiveAdmin che definisce ciò che si sta cercando di fare:

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 

E, infine, credo che questa risposta è probabilmente abbastanza preciso: https://stackoverflow.com/a/17612718/175825

Ma si potrebbe desiderare di indagare di più su come è possibile implementare sort_order:

Per quel che vale, io non sono un fan di documenti magre di ActiveAdmin. In bocca al lupo.

+8

+1 per non gradire qualcosa su ActiveAdmin. – Ricky

1

È necessario utilizzare il riordino per ignorare l'ordine predefinito. Prova questo!

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

Il problema con questa soluzione è che, purtroppo, non riesco a ordinare manualmente da nessuna delle altre colonne attraverso l'interfaccia utente. – rogerkk