2012-03-25 13 views
18

Esiste un modo elegante per implementare azioni di ordinamento e di conversione nelle viste/controller nei binari?Il modo migliore per implementare l'ordinamento asc o desc nei binari

Quello che ho è la vista index.html.erb comune che elenca tutti i miei dati di un determinato modello e voglio aggiungere alcuni pulsanti piccoli (o rendere il titolo cliccabile) per ordinare l'elenco crescente o decrescente di quella colonna . Mi chiedo se c'è un modo elegante ed efficiente per farlo o dovrei semplicemente aggiungere un nuovo controller per ogni colonna (o pulsante) Voglio che questa azione si verifichi.

risposta

35

Ecco due esempi che sto utilizzando. Il primo con @plans è dove voglio solo ordinare un decimale dal più basso al più alto. L'altro esempio è un po 'più complicato in cui voglio ordinare i file dell'utente dal più recente al più vecchio. Ho quindi utilizzato una seconda variabile per raggruppare i file in base alla data di creazione. Entrambi gli esempi sono stati eseguiti nei controller.

@plans = Plan.order("price") 

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

Per i pulsanti cliccabili nella vista, check out episodio Railscast di Ryan Bates che copre queste informazioni.

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

+0

grazie, ho usato l'aproach Railscast – marimaf

+0

caso questo codice da attuare nella vista, controller o aiutante ? – sqrcompass

+1

Fare '@ user.files.order (id:: desc)' è il modo più elegante per farlo se si sta scrivendo staticamente. Se la sua dinamica è meglio fare semplicemente '@ user.files.order (" # {criteri} # {direzione} ")' – Lomefin

3

Recentemente ho usato un gioiello chiamato sorted con buoni risultati nel caso in cui si desidera utilizzare una soluzione pre-confezionato per questo, invece di stendere il proprio.

https://github.com/mynameisrufus/sorted

-1

qui è relazione di dati che si mostra come accediamo nome in ordine aderenti

@results = Result.has_pro.ascending(:name).page(params[:page]) 
Problemi correlati