it-swarm.com.de

Aufsteigend sortieren Rails

Hallo, ich habe dieses Modell 

Modellartikel

class Inventory::Item < ActiveRecord::Base
  has_many :types, :class_name => "ItemType"
  attr_accessible :name
end

Modell item_type

class Inventory::ItemType < ActiveRecord::Base
  belongs_to :item 
  attr_accessible :number
end

lassen Sie uns im Controller sagen, dass ich Typen (die die Klasse ItemType haben) aufsteigend nach Elementnamen sortieren möchte. Wie mache ich das?

Zum Beispiel,

  • ItemType-Nummer = 1 hat Artikelname = Tabelle
  • ItemType Nummer = 2 hat Artikelname = Vorsitz
  • ItemType-Nummer = 3 hat Artikelname = Fenster
  • ItemType Nummer = 4 hat Artikelname = Computer

Anstatt die Nummer nach der Nummer zu sortieren, möchte ich, dass sie basierend auf item.name (ASC) wie folgt sortiert wird:

  • ItemType Nummer = 2 hat Artikelname = Vorsitz
  • ItemType Nummer = 4 hat Artikelname = Computer
  • ItemType-Nummer = 1 hat Artikelname = Tabelle
  • ItemType-Nummer = 3 hat Artikelname = Fenster

26
muhihsan

So etwas sollte den Trick tun ...

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

Wenn Sie dies an vielen Orten tun müssen, können Sie dasselbe tun, indem Sie Ihrem :order-Aufruf einen has_many-Parameter angeben, stattdessen - http://apidock.com/Rails/ActiveRecord/Associations/ClassMethods/has_many .

34
Brad Werth

Um Datensätze in einer bestimmten Reihenfolge aus der Datenbank abzurufen, können Sie die Methode order verwenden:

Item.order(:name)

Standardmäßig wird aufsteigend sortiert.

17
Andy Hayden

Sie können die Standardreihenfolge in Ihrem Modell auch folgendermaßen festlegen:

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

Dadurch werden die Elemente nach item_name ohne Änderung im Controller sortiert

1
Arif

Zum Erstellen von ASC (Standardsortiermodus) für Namensart von Feldern (Alphabete)

You can use ORDER BY Clause in MySQL

In Rails können Sie also einfach verwenden 

Model.order(:field_name)
0
Jyothu