2016-05-10 81 views
1

RailsGuides,我在形式創造一個下拉菜單是這樣的:顯示文本值存儲爲整數

[['Lisbon', 1], ['Madrid', 2], ...] 

其產生的下拉列表,如:

<option value="1">Lisbon</option> 
<option value="2">Madrid</option> 

在我的節目頁面,我想顯示我的存儲值的文本(Madrid)而不是整數(2)。

該值存儲在數據庫中。這是一個實時系統,這意味着我無法更改存儲的內容(我可以,但不願意)。

我更喜歡從哈希構建下拉列表,但由於這是RailsGuide中的建議格式,因此我認爲有一個內置的幫助程序可以執行此操作。如果我將下拉列表存儲爲字符串,將會更容易,但它會佔用數據庫中的大量空間。

我不能使用索引,因爲值不是從0開始,它可能不是按順序。我可以在這個2維數組上進行搜索,但有沒有更簡單的方法?有誰知道解決這個問題的最簡單方法嗎?

+0

以下代碼適用於我''%= select_tag:city,options_for_select([['Lisbon',1],['Madrid',2]])%>' – retgoat

+0

我想要的是在視圖頁面中顯示當存儲2時,字符串「Madrid」。 – hook38

回答

1

在這樣的情況下,有從數據庫中值顯示值的直接映射一個選擇,你,你始終要用於演示文稿的顯示值,我用這個辦法:

在你模型,宣佈與映射關係的數組:

class Person 

    GENDER = [ 
    ["Male", "m"], 
    ["Female", "f"] 
    ] 

end 

在你編輯視圖(形式),你可以創建選擇使用這種方法:

<%= f.select :gender, Person::GENDER %> 

在Show View,可以顯示使用此格式:

<%= Person::GENDER.find {|item| item[1] == @person.gender }[0] %> 

這種方法讓你能夠控制項目的顯示順序的選擇,仍然能夠合理容易呈現顯示價值的能力。

+0

好的...很簡單。雖然我認爲Rails會有一個幫手來做這件事。謝謝! – hook38

+0

如果他們這樣做,我還沒有找到它。但是再一次,我多年來一直在努力,並且從那以後沒有看到更好的選擇。請享用! –