2

このような選択ボックスがあります(form_for内)

  <%=f.select(:whatever_id, {"blah"=>0, "blah2"=>1, "blah3"=>2, "blah4"=>3}, {:include_blank => true}) %>

出力は良好ですが、奇妙です...次のように:

<select id="personal_information_whatever_id" name="personal_information[whatever_id]"><option value=""></option>
<option value="1">blah2</option>

<option value="2">blah3</option>
<option value="0">blah</option>
<option value="3">blah4</option></select>

しかし、私はそれを順番に進めたい...何が起こっているのか、どうすれば修正できますか?

編集:答えはこれに関係しているように感じます

ハッシュを使用すると、順序が保証されることはありません。.sort() を試して、値をアルファベット順に並べ替えることができます。

ハッシュ以外に使えるものはありますか?

4

3 に答える 3

9

はい、配列の配列を使用する必要があります。あなたの例で最も簡単な方法は次のようなものです:

<%=f.select(:whatever_id, [["blah", 0], ["blah2", 1], ["blah3", 2], ["blah4", 3]], {:include_blank => true}) %>

これで十分です。api.rubyonrails.comのドキュメントも参照してください。

于 2009-02-09T17:31:58.750 に答える
2

モデルで、ハッシュを定義します(あなたの場合、モデルは「なんでも」で、ハッシュは「何とか」です):

BLAHS = { "blah"=>0, "blah2"=>1, "blah3"=>2 }

ハッシュを配置するselectタグに、次のように入力します

Whatever::BLAHS.sort {|a,b| a[1] <=> b[1]}

これにより、他の回答で説明されているように、2 番目の項目 (id/numbers) で並べ替えられた配列が作成されます。

保存後、Whatever をデータベースから引き出して、フィールド blah を表示したい場合は、次のようにします。

Whatever::BLAHS.index whatever.blah

他の人が言及した配列の配列は機能しますが、Wh​​atever を表示したい場合、どうすれば blah の値を適切に表示できますか? この問題を解決するため、ハッシュを使用することをお勧めします。

于 2010-12-16T21:35:21.420 に答える