Trier par ordre croissant Rails
Salut j'ai ce modèle
Modèle article
class Inventory::Item < ActiveRecord::Base
has_many :types, :class_name => "ItemType"
attr_accessible :name
end
Modèle item_type
class Inventory::ItemType < ActiveRecord::Base
belongs_to :item
attr_accessible :number
end
Ensuite, disons dans le contrôleur que je veux trier les types (qui a la classe ItemType) dans l'ordre croissant en fonction du nom de l'élément. Comment je fais cela ?
Par exemple,
- ItemType nombre = 1 a Item name = Table
- ItemType nombre = 2 a nom de l'Élément = Chaise
- ItemType nombre = 3 a nom de l'Élément = Fenêtre
- ItemType nombre = 4 A Nom D'article = Ordinateur
Donc, au lieu de le trier à partir du nombre, Je veux le trier en fonction de item.name (ASC) comme ceci:
- ItemType nombre = 2 a nom de l'Élément = Chaise
- ItemType nombre = 4 a nom de l'Élément = Ordinateur
- ItemType nombre = 1 a Item name = Table
- ItemType nombre = 3 a nom de l'Élément = Fenêtre
5 réponses
Quelque chose comme ça devrait faire l'affaire...
ItemType.includes( :item ).order( 'inventory_items.name DESC' )
En outre, si vous devez le faire dans de nombreux endroits, vous pouvez accomplir la même chose en fournissant un paramètre :order
à votre appel has_many
, à la place - http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_many .
Pour récupérer les enregistrements de la base de données dans un ordre spécifique, vous pouvez utiliser le order
méthode:
Item.order(:name)
par défaut, cela trie Ascendant.
Vous pouvez également définir l'ordre par défaut dans votre Modèle comme ceci:
default_scope order("#{self.table_name}.item_name ASC")
Cela va trier les éléments par item_name sans aucun changement dans le contrôleur
Pour faire ASC (mode de tri par défaut) pour le type de nom des champs (Alphabets),
You can use ORDER BY Clause in MySQL
Par conséquent, dans Rails, vous pouvez simplement utiliser
Model.order(:field_name)
Dans votre requête, vous pouvez utiliser/ajoutez ORDER BY itemType ASC