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
25
demandé sur muhihsan 2013-05-09 11:09:10

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 .

33
répondu Brad Werth 2013-05-09 13:28:40

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.

16
répondu Andy Hayden 2013-05-09 07:17:18

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

1
répondu Arif 2013-05-09 08:49:49

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)
0
répondu Jyothu 2013-05-09 08:21:39

Dans votre requête, vous pouvez utiliser/ajoutez ORDER BY itemType ASC

-2
répondu Lian 2013-05-09 07:14:53