我正在尝试构建一个选择框,它将按字母顺序返回我的项目列表:
<%= f.select(:project_id, current_user.projects.all(:order => 'name').collect {|p| [ p.name, p.id ]}) %>
只要名称字段仅包含一个单词,例如Project ,这将起作用。
但是,所有包含空格的条目,例如My project,都不会被排序。它们只是出现在列表的顶部。
我怎样才能订购所有的字符串?
谢谢你的帮助。
我正在尝试构建一个选择框,它将按字母顺序返回我的项目列表:
<%= f.select(:project_id, current_user.projects.all(:order => 'name').collect {|p| [ p.name, p.id ]}) %>
只要名称字段仅包含一个单词,例如Project ,这将起作用。
但是,所有包含空格的条目,例如My project,都不会被排序。它们只是出现在列表的顶部。
我怎样才能订购所有的字符串?
谢谢你的帮助。
好的,这就是我最终的结果:
<%= f.select(:project_id, current_user.projects.all(:order => 'name').sort_by{|n| n.name.downcase}.collect {|p| [ p.name, p.id ]}) %>
似乎大写条目导致了问题。*sort_by* 方法来救援。不过,不确定是否有更好的方法来做到这一点。
试试排序功能
<%= f.select(:project_id, current_user.projects.all(:order => 'name').collect {|p| [ p.name, p.id ]}.sort) %>
这将对您的列表进行排序。
以这种方式使用它
<%= f.select :brand_id, options_for_select(current_user.projects.all(:order => 'name').collect {|p| [ p.name, p.id ]}.sort), {}, :id => 'dealerships_filter_brand_id' %>
请试试这个,我用过它,它对我有用。
您可以为此在数组上使用排序方法,因为您的代码包含对数组 [name, id],您可以像这样对它进行排序,
排序!{ |a, b| a.first <=> b.first }
考虑到您想使用第一个 arg 名称进行排序
如果必须对第一个参数进行排序,则更好用
排序!