2014-04-16 170 views
0

我已將美國各州的下拉列表以每個州的全名和隱藏值作爲縮寫。當用戶保存隱藏的值(縮寫)存儲在數據庫中,我們將其返回到「顯示」操作中。如何顯示下拉列表的顯示值而不是隱藏值

我可以創建一個輔助方法,但我有更多的下拉類似的問題,這就是爲什麼尋找一個更簡單的解決方案。

我也只讀和殘疾嘗試,但這兩呈現HTML控件,以及不要求:

profiles_helper.rb 
def us_states 
[  
    ['Alabama', 'AL'], 
    ['Alaska', 'AK'], 
    ['Arizona', 'AZ']  
] 
end 

我使用簡單形式:

_form.html.erb 
<%= simple_form_for(@profile) do |f| %> 
    <%= f.input :state, collection: us_states %> 
<% end %> 

我應該怎麼在show.html.erb中顯示每個狀態的全名,而不是縮寫。有什麼簡單的形式可用嗎?

show.html.erb 
<%= @profile.state %> 

回答

0

我已經創建另一個helper方法解決了這個問題。 「get_value」方法將獲取字段的集合和隱藏值並返回可見值。首先將Collection轉換爲散列,然後將隱藏值傳遞給索引運算符返回可見值。以下是us_states的代碼,同樣可以將任何集合傳遞給此方法以獲得可見值:

profiles_helper.rb 
def us_states 
[  
    ['Alabama', 'AL'], 
    ['Alaska', 'AK'], 
    ['Arizona', 'AZ']  
] 
end 

def get_value(collection, hidden_value) 
    hash = Hash[collection.map {|key, value| [value, key]}] 
    hash[hidden_value] 
end 

_form.html.erb 
<%= simple_form_for(@profile) do |f| %> 
    <%= f.input :state, collection: us_states %> 
<% end %> 

show.html.erb 
<%= get_value(us_states, @profile.state %> 
0

在Profile模型中定義一個方法來爲State創建全名。

def state_name 
    state = State.where("id= #{self.state}").first 
    state.name 
end 

在你的節目,你將只需要調用這樣的方法來顯示狀態的全名:

<%= @profile.state_name %> 
+0

是在rails中構建的狀態類?正如我所提到的,我必須爲其他少數下拉菜單執行此操作,因此尋找可用的簡單形式可能會有所幫助。 – jmrp

+0

嗯,我認爲你有一個名爲「States」的模型引用了一個狀態表。我不熟悉「simple_form」(奇怪,我知道)。 –

+0

謝謝你盡力幫忙 – jmrp