2009-02-09 33 views
2

我有一個選擇框,看起來像這樣(一的form_for內)select_tag是排序(奇怪)的Rails]

<%=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()按字母順序排列 中的值。

有沒有什麼我可以用散列?

回答

9

是的,你應該使用數組的數組。你的例子最簡單的方法是這樣的:

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

這應該就夠了。請查看api.rubyonrails.com的文檔。

+0

優秀。正是我需要的。謝謝。 – 2009-02-09 17:42:14

0

問題是options參數是一個散列,並且散列沒有保證的順序。

這應該爲你

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

響應您的評論編輯工作:對於集合看到collection_select

+0

很酷,謝謝HermanD。我只是輸入:)在集合方面的任何簡單的解決方法? – 2009-02-09 17:30:34

2

在你的模型,定義哈希(你的情況你的模式是「無所謂」,你的哈希「無聊症」):

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

在你把你的哈希值,類型選擇標籤

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

這將創建一個數組,如其他答案中所述,按第二項(id /數字)排序。

保存後,當你拉一個無論背出數據庫和要顯示的字段等等,這樣做

Whatever::BLAHS.index whatever.blah 

別人的作品中提到數組的數組,但是當你想顯示無論如何,你如何以一種不錯的方式來表現等值?我建議堅持使用散列,因爲它解決了這個問題。