0

プロジェクトのリストをアルファベット順に返す選択ボックスを作成しようとしています。

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

これは、名前フィールドにProjectなどの単語が1つだけ含まれている限り機能します。

ただし、私のプロジェクトなど、空白を含むすべてのエントリは注文されません。それらは単にリストの一番上に表示されます。

すべての文字列を注文するにはどうすればよいですか?

助けてくれてありがとう。

4

3 に答える 3

1

OK、これは私が最終的に得たものです:

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

これには配列でsortメソッドを使用できます。コードにはペアの配列[name、id]が含まれているため、次のように並べ替えることができます。

arr.sort!{| a、b | a.first <=>b.first}

最初の引数名を使用してソートすることを検討します

最初の引数でソートする必要がある場合は、さらに使用することをお勧めします

arr.sort!

于 2012-09-17T16:28:09.877 に答える