6 votes

Ruby On Rails : Ordre par attribut d'enfant

Si j'ai un modèle A avec un attribut X et un modèle enfant de A appelé B avec un attribut Y, comment puis-je ordonner toutes les instances de A par Y et X ?

10voto

jordanandree Points 553

Vous pouvez utiliser default_scope pour ordonner toutes les instances de votre modèle par une association. Il suffit de passer le nom du modèle associé à la fonction :includes et ajuster le paramètre de votre commande :

default_scope :include => 'record', :order => 'records.attribute'

Cependant, default_scope n'est pas très recommandé. Une approche plus propre serait de créer une méthode de classe dans votre modèle parent que vous pouvez appeler à partir de vos contrôleurs :

def self.all_ordered_by_child
   includes(:records).order('records.attribute DESC')
end

Il vous suffira de mettre à jour toutes les instances qui appellent tous les enregistrements du modèle parent.

2voto

Peter Points 38320

Je vais utiliser des lettres minuscules à la place :

a_instances.sort_by{|a| [a.b.y, a.x]}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X