0

我正在尝试构建一个选择框,它将按字母顺序返回我的项目列表:

<%= f.select(:project_id, current_user.projects.all(:order => 'name').collect {|p| [ p.name, p.id ]}) %>

只要名称字段仅包含一个单词,例如Project ,这将起作用。

但是,所有包含空格的条目,例如My project,都不会被排序。它们只是出现在列表的顶部。

我怎样才能订购所有的字符串?

谢谢你的帮助。

4

3 回答 3

1

好的,这就是我最终的结果:

<%= f.select(:project_id, current_user.projects.all(:order => 'name').sort_by{|n| n.name.downcase}.collect {|p| [ p.name, p.id ]}) %>

似乎大写条目导致了问题。*sort_by* 方法来救援。不过,不确定是否有更好的方法来做到这一点。

于 2012-09-17T16:52:52.060 回答
0

试试排序功能

<%= 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' %>

请试试这个,我用过它,它对我有用。

于 2012-09-17T16:27:03.597 回答
0

您可以为此在数组上使用排序方法,因为您的代码包含对数组 [name, id],您可以像这样对它进行排序,

排序!{ |a, b| a.first <=> b.first }

考虑到您想使用第一个 arg 名称进行排序

如果必须对第一个参数进行排序,则更好用

排序!

于 2012-09-17T16:28:09.877 回答