2013-05-09 14 views
21

こんにちは、私はこのモデルソート

モデルアイテム

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

モデルITEM_TYPE

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

を持って、その後クラスitemTypeにしていた(私は種類をソートしたいコントローラーにしましょう)をItem nameに基づいて昇順に並べ替えます。それ、どうやったら出来るの?例えば

  • itemTypeに数= 1は、項目名=表を有する
  • itemTypeに数= 2持つ商品名=椅子
  • itemTypeに数= 3持つ商品名=ウィンドウ
  • itemTypeに数=:4だからではなく、数からそれをソートする、私はそれがこのようitem.name(ASC)に基づいてソートしたい項目名=コンピュータ

を持っています

  • itemTypeに数= 2は、項目名を持つ=議長
  • itemTypeに数= 4有し項目名=コンピュータ
  • itemTypeに数= 1は商品名=表
  • itemTypeに数= 3持つ商品名=ウィンドウ
  • クエリで

答えて

29

何かがトリックを行う必要がありますが、多くの場所でこれを行うために必要がある場合は...

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

はまた、あなたのhas_manyコールに:orderパラメータを提供することで、同じことを達成することができ、代わりにhttp://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_many。 Railsではあなたは、単にあなたはまた、デフォルトの順序を設定することができ

Model.order(:field_name) 
-2

、あなたが012を使用することができ、特定の順序でデータベースからレコードを取得するにはORDER BY itemType ASC

15

を追加する/使用することができます:

Item.order(:name) 

デフォルトでは、これは昇順にソートします。このような

0

、あなたのモデルは次のようになります:

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

これは、コントローラの変更なしでitem_nameで項目を並べ替えます

1

を使用することができるフィールドの名前の種類(アルファベット)、したがって

You can use ORDER BY Clause in MySQL 

ためASC(デフォルトソートモード)を製造するための