web-dev-qa-db-fra.com

Rails tri croissants

Salut j'ai ce modèle 

Article de modèle

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

puis, disons dans le contrôleur, je veux trier les types (qui ont la classe ItemType) dans l'ordre croissant en fonction du nom de l'élément. Comment je fais ça?

Par exemple,

  • ItemType number = 1 a Item name = Table
  • ItemType number = 2 a Item name = Chair
  • ItemType number = 3 a Item name = Fenêtre
  • ItemType number = 4 a Item name = Ordinateur

Ainsi, au lieu de le trier par numéro, je veux le trier en fonction de item.name (ASC) comme ceci:

  • ItemType number = 2 a Item name = Chair
  • ItemType number = 4 a Item name = Ordinateur
  • ItemType number = 1 a Item name = Table
  • ItemType number = 3 a Item name = Fenêtre

26
muhihsan

Quelque chose comme ça devrait faire l'affaire ...

ItemType.includes( :item ).order( 'inventory_items.name DESC' )

De même, si vous avez besoin de le faire dans de nombreux endroits, vous pouvez effectuer 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 .

34
Brad Werth

Pour extraire des enregistrements de la base de données dans un ordre spécifique, vous pouvez utiliser la méthode order :

Item.order(:name)

par défaut cela trie par ordre croissant.

17
Andy Hayden

Vous pouvez également définir l'ordre par défaut dans votre modèle comme suit:

default_scope order("#{self.table_name}.item_name ASC")

Cela va trier les éléments par item_name sans aucune modification du contrôleur

1
Arif

Pour créer ASC (Mode de tri par défaut) pour le type de nom de champs (Alphabets),

You can use ORDER BY Clause in MySQL

Par conséquent, dans Rails, vous pouvez simplement utiliser 

Model.order(:field_name)
0
Jyothu