29

こんにちは、私はこのモデルを持っています

モデルアイテム

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 を持つ) をアイテム名に基づいて昇順にソートしたいとします。それ、どうやったら出来るの?

例えば、

  • ItemType 番号 = 1 のアイテム名 = テーブル
  • ItemType 番号 = 2 のアイテム名 = 椅子
  • ItemType 番号 = 3 の Item name = Window
  • ItemType 番号 = 4 には Item name = Computer があります

したがって、番号から並べ替えるのではなく、次のように item.name(ASC) に基づいて並べ替えます。

  • ItemType 番号 = 2 のアイテム名 = 椅子
  • ItemType 番号 = 4 には Item name = Computer があります
  • ItemType 番号 = 1 のアイテム名 = テーブル
  • ItemType 番号 = 3 の Item name = Window

4

5 に答える 5

39

このような何かがうまくいくはずです...

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

また、多くの場所でこれを行う必要がある場合は、代わりにhttp://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_many:orderというパラメーターをhas_many呼び出しに指定することで、同じことを実現できます。

于 2013-05-09T07:26:47.943 に答える
2

フィールドの名前の種類 (アルファベット) の ASC (デフォルトの並べ替えモード) を作成するには、

You can use ORDER BY Clause in MySQL

したがって、Railsでは簡単に使用できます

Model.order(:field_name)
于 2013-05-09T08:21:39.027 に答える
1

次のように、モデルでデフォルトの順序を設定することもできます。

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

これにより、コントローラーを変更せずに item_name でアイテムが並べ替えられます

于 2013-05-09T08:49:49.403 に答える