Rails select_tag按字母顺序排列

时间:2013-04-02 09:29:59

标签: ruby-on-rails html-select

我有select_tag

select_tag :id, options_for_select(Portal.all.collect{|p| [p.name, portal_datum_path(p.id)]}, [@portal.name, portal_datum_path(@portal)]), :onChange => "window.location=($(this).val());"

它允许用户选择一个门户网站,在该门户网站上可以按字母顺序查看我想要显示这些门户网站的某些元素。

我尝试在控制器中订购:名称,但没有获胜。

def index
  @portals = Portal.with_name_or_subdomain(params[:keyword]).order(:name).limit(100)
end

我查看了rails docs,select_tag中没有内置选项本身是否有一些我应该使用的秘密选项?

3 个答案:

答案 0 :(得分:6)

一小时后,您所要做的只是.sort传递给options_for_select的选项数组。这是我的黑客它修复但不是很性感

select_tag :id, options_for_select(Portal.all.collect{|p| [p.name, portal_datum_path(p.id)]}.sort, [@portal.name, portal_datum_path(@portal)]), :onChange => "window.location=($(this).val());"

希望有所帮助

答案 1 :(得分:1)

将其改为

select_tag :id, options_from_collection_for_select(portals,:name, :id, 1), :onChange => "window.location=($(this).val());"**strong text**

答案 2 :(得分:1)

将您的选项收集到数组中,如下所示:

options = Portal.all.collect{|p| [p.name, portal_datum_path(p.id)]},    [@portal.name, portal_datum_path(@portal)])

然后排序:

options.sort!{ |x, y| x[0] <=> y[0] }

我在options_for_select的猴子补丁中执行此操作,这是我为处理各种选择内容而构建的模块的一部分,因为对这样的选择进行排序比较常见。

def options_for_select(options, selected_items:nil, alphabetize: true)
  options.sort!{ |x, y| x[0] <=> y[0] } if alphabetize 
  super(options, selected_items)
end