如何在我的collection_select表单字段中订购商品?

时间:2011-06-28 18:00:57

标签: ruby-on-rails ruby-on-rails-3 forms

这应该是一个简单的查找,但我似乎无法在文档中找到它。

截至目前,select中呈现的所有内容都按id排序,但我希望它能够呈现一个按字母顺序排列的列表(以使其更易于人工扫描)。

我目前用于生成选择的代码:

<%= f.collection_select :item_id, Item.all, :id, :name %>

Karma指出一个可以应用于Item的任何属性的通用答案(不仅仅按字母顺序依据:name)。

目前正在使用Rails v 3.0.5

2 个答案:

答案 0 :(得分:0)

还有另一个问题here可能会有所帮助,尽管我还没有尝试过。如果您尝试基于此示例(来自上一个站点),希望在表单中排序将适合您:

class Log < ActiveRecord::Base
  has_many :items, :order => "some_col DESC"
end

答案 1 :(得分:0)

您可以在模型中执行此操作,就像设置默认顺序的其他答案一样:

has_many :items, :order => "some_col DESC"

或者,如果您需要偏离默认订单,您还可以在控制器中设置它并在视图中进行访问:

controller.rb

def index
  @items = Item.all(:order => 'some_col DESC')
end

index.erb

&lt;%= f.collection_select:item_id,@ item,:id,:name%&gt;


另一个选择是您可以在模型中执行命名范围以进行排序:

item.rb的

named_scope :alphabetically, :order => "some_col DESC"

index.erb

<%= f.collection_select :item_id, Item.alphabetically, :id, :name %>