2009-05-05 57 views
14

我需要從哈希中可用的值創建一個選擇框。Rails - 從對象哈希創建選擇標記

舉例來說,我有一個「東西」和「東西」有多種狀態字段:

1 => 'State A' 
2 => 'State B' 

可以通過對事物的方法。

我該如何建立一個選擇標籤?

回答

48

正如Schrockwell說:

Hash.each |a|返回形式a = [key, value]的數組,所以對於哈希@status_fields你可以寫:

<%= collection_select('thing', 'status', @status_fields, :first, :last) %> 

另外,如果您想關鍵在選擇列表和值點選擇列表中值顯示出來,然後:

<%= collection_select('thing', 'status', @status_fields, :last, :first) %> 

這將選擇通過thing.status或沒有給出的選項如果無返回

如果你只想創建不依賴於對象的任何選擇使用

<%= select_tag('name', options_from_collection_for_select(@status_fields, :first, :last, '2')) %> 

其中「2」是所需的選擇的指數

PS:我沒有足夠的聲望去修改原來的帖子或對它發表評論

8

你可以做類似

select "foo", "bar", @hash_object 

select "foo", "bar", @hash_object.map { |h| [h.key, h.value] } 

我可能會首先反轉的哈希值,使關鍵點的值

4

Hash.each |a|返回數組形式爲a = [key, value],所以對於散列@status_fields你可以寫:

<%= collection_select('thing', 'status', @status_fields, :first, :last) %> 

另外,如果您想關鍵在選擇列表中顯示和值點選擇列表中的值,則:

<%= collection_select('thing', 'status', @status_fields, :last, :first) %> 
+0

那麼,我怎麼會告訴它選定的值 - 這看起來並沒有把它拿起來。 – 2009-05-05 14:20:30

+0

該文檔指出「將從實例對象的調用方法返回的值將被選中。」因此,不要將'thing'作爲第一個參數傳遞,而是嘗試傳遞對象@thing的實際實例。 – Schrockwell 2009-05-05 16:17:48