2012-07-12 4 views
1

J'ai une table dans mon application qui affiche actuellement les éléments dans l'ordre dans lequel ils ont été créés. Je voudrais qu'ils trient par mon attribut de date (<% = o.dateg%>) dans l'ordre chronologique. Quel est le bon moyen de faire cela?Attribut de tri par date dans la liste des rails

Controller:

def show 
@occasion = Occasion.find(params[:id]) 
end 

Vue:

<% @user.occasions.each do |o| %> 
      <td><%= o.name %></td> 
      <td><%= o.pname %></td> 
      <td><%= o.dateg %></td> 

Merci!

+0

T ry les trier de la base de données. –

+0

et je pourrais le faire par .. code de contrôleur ajouté – js111

+0

lire ceci: http://stackoverflow.com/questions/3393687/how-do-i-set-a-default-sort-order-for-a-rails- modèle –

Répondre

3

Vous devez avoir ça, n'est-ce pas?

class User < ActiveRecord::Base 
    has_many :occassions 
end 

Vous pouvez modifier le has_many à:

has_many :occasions, order: 'dateg desc' 
3

Dans la vue, vous pouvez utiliser par exemple sort

@user.occasions.sort {|a,b| b.dateg <=> a.dateg }.each do |o|

(ce sera chronologique inverse)

Cependant, vous devriez vraiment faire cela dans le modèle pas dans la vue, un champ nommé fonctionnerait très bien:

class User < ActiveRecord::Base 
    has_many :occasions 
    scope :recent_occasions, order('dateg desc') 
end 

Ensuite, utiliser