Comment puis-je commander un has_many par l'association Ruby on Rails?
Suivants AR modèles, je voudrais trier les utilisateurs par ordre alphabétique par nom de famille lors d'une poignée à une tâche:
#user
has_many :assignments
has_many :tasks, :through => :assignments
#assignment
belongs_to :task
belongs_to :user
#task
has_many :assignments
has_many :users, :through => :assignments
Je voudrais obtenir une tâche de navigation de ses utilisateurs assignés, et de trier la liste par ordre alphabétique.
Je continue à penser que je devrais être en mesure d'ajouter le :order
clause has_many :users, :through => :assignments
comme ceci:
#task.rb
has_many :assignments
has_many :users, :through => :assignments, :order => 'last_name, first_name'
toutefois, cela ne fonctionne pas.
Comment trier les utilisateurs par last_name
lors d'une tâche?
Vous devez vous connecter pour publier un commentaire.
Depuis condition arguments sont déconseillés dans les Rails 4, il faut utiliser le champ de blocs:
Rails 3.x version:
Mise à JOUR: Cela ne fonctionne que dans Rails 3.x (peut-être avant aussi). Pour 4+, voir les autres réponses.
La
M.G.Palmer's
approche fonctionne bien, cependant nom de la table est en cause. Il y a une meilleure façon de le faire:Serait-ce de travailler pour vous?
Vous pouvez définir d'autres nommées étendues pour le tri doit être différent.
http://ryandaigle.com/articles/2008/11/18/what-s-new-in-edge-rails-default-scoping
Cela fonctionne pour moi (Rails 4.2)
L'application d'une commande sur le travers de la carte n'est pas conservé, en l'occurence, ce n'est pas assez d'avoir les genres commandé:
J'ai donc remplacer ceci par exemple:
À faire que de travail pour les affectations, ce devrait être quelque chose comme ceci (non testé)
Je suis à l'aide de Rails (5.0.0.1) et pourrait faire le tri avec cette syntaxe dans mon modèle de Groupe qui a de nombreux utilisateurs à travers group_users:
L'adapter à votre besoin en travail.
Vous pouvez également créer un nouveau "sort_order' colonne dans le tableau d'affectation, et d'ajouter une valeur par défaut portée comme
à vos missions modèle.
has_many :les utilisateurs, -> { commande(:nom, :prenom) }, :par => :les missions, source: 'utilisateur'