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 number = 1 有 Item name = Table
  • ItemType number = 2 有 Item name = Chair
  • ItemType number = 3 有 Item name = Window
  • ItemType number = 4 有 Item name = Computer

因此,我希望它不是从数字中排序,而是基于 item.name(ASC) 排序,如下所示:

  • ItemType number = 2 有 Item name = Chair
  • ItemType number = 4 有 Item name = Computer
  • ItemType number = 1 有 Item name = Table
  • ItemType number = 3 有 Item name = Window

4

5 回答 5

39

像这样的东西应该可以解决问题......

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

此外,如果您需要在许多位置执行此操作,您可以通过为:order您的调用提供一个参数来完成相同的事情has_many,而不是 - http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_many

于 2013-05-09T07:26:47.943 回答
18

要按特定顺序从数据库中检索记录,您可以使用以下order方法

Item.order(:name)

默认情况下,这是按升序排序的。

于 2013-05-09T07:17:18.170 回答
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 回答
-2

在您的查询中,您可以使用/添加ORDER BY itemType ASC

于 2013-05-09T07:14:53.373 回答