2011-11-08 61 views
0

我有這個哈希常數:Rails窗體選項列表如何?

EMPLOYEE_NUM_OPTIONS = { 
    'Please, select' => '', 
    '10-50' => '10-50', 
    '51-100' => '51-100', 
    '101-500' => '101-500', 
    '501-1999' => '501-1999', 
    '+2000' => '2000', 

}

,我想使用Rails的形成正是因爲它的書寫順序選項。使用

<%= pf.select(:employee_num, GroupProfile::EMPLOYEE_NUM_OPTIONS.sort)%> 

沒有給出預期的結果。

謝謝你的幫助。

回答

1

當您在Hash上調用sort時,您將有效地將Hash轉換爲一個鍵/值數組數組,然後使用Array#<=>對這些數組進行排序,這將破壞您的訂單。無論你的手pf.select最終應該通過options_for_select打算:

接受容器(散列,數組,枚舉,你的類型),返回選項標籤的字符串。給定一個容器,其中元素響應第一個和最後一個(比如兩個元素的數組),「lasts」用作選項值,「firsts」用作選項文本。 哈希自動轉換爲這種形式,所以鍵變成「第一」,數值變成最後一個。

強調我的。所以,你應該可以說這一點,如果你使用Ruby 1.9:

<%= pf.select(:employee_num, GroupProfile::EMPLOYEE_NUM_OPTIONS) %> 

如果你是1.8,那麼你可以改變EMPLOYEE_NUM_OPTIONS到陣列的陣列:

EMPLOYEE_NUM_OPTIONS = [ 
    [ 'Please, select', '' ], 
    [ '10-50','10-50' ], 
    [ '51-100', '51-100' ], 
    [ '101-500', '101-500' ], 
    [ '501-1999', '501-1999' ], 
    [ '+2000', '2000' ] 
] 

到獲得訂單並將其交給pf.select。如果你還需要一個哈希表,然後:

EMPLOYEE_NUM_OPTIONS_HASH = Hash[EMPLOYEE_NUM_OPTIONS] 

應該做的伎倆。

再一次,如果你使用1.9,那麼你將已經訂購了哈希,所以你不需要所有這些額外的工作。

+0

謝謝。現在我明白這裏隱藏的是什麼,並且肯定不會在將來感到困惑。乾杯!我正在使用ruby 1.8和陣列的欺騙做了它。 – Yulia

相關問題