2010-11-19 70 views
0

我真的很想弄清楚如何在模型中使用類或者類型的哈希或者數組,但是我覺得我有點困惑。這是我想要做的,我會很感激任何幫助。Ruby on Rails - 選擇標記的模型哈希

我在我的應用程序中有一個警報模型,我原本有一個Alert_Type表,但想擺脫它,因爲它比我真正需要的查詢更多,只有高,中,低類型的警報,所以我是將它們移動到模型

SEVERITY = { "High" => :high, 
       "Medium" => :medium, 
       "Low" => :low } 

<%= select :alert, :severity, Alert::SEVERITY, {:prompt => "Select one"} %> 

我覺得這是不正確,因爲當我拉數據庫值是高,低,中等,但需要獲得該值的文本。當我這樣做,

SEVERITY = { :high => "High" 
        :medium => "Medium", 
        :low => "Low" } 

我有下拉問題。我試圖找出最佳實踐方法,以便當我可能或不需要翻譯時,它就會正常工作。我應該做一個散列或只是數組。非常感謝!

回答

0

select方法需要一個數組作爲與下一個形式3TH論點:

[["field for_value_1", "field_for_name_attr_1"], 
["field for_value_2", "field_for_name_attr_2"], 
["field for_value_n", "field_for_name_attr_n"]] 

["field for_value_and_attr_1", "field_for_value_and_attr_2","field_for_value_and_attr_n"] 

散列不應該工作。你可以製作一個陣列

SEVERITY = { :high => "High" 
        :medium => "Medium", 
        :low => "Low" } 
<%= select :alert, :severity, Alert::SEVERITY.to_A, {:prompt => "Select one"} %> 

並傳遞給數組的方法。因爲(如果你在Ruby中知道這個消息:),那麼::one,:two,:三件事是Symbol類的實例。 符號類是一種特殊的字符串:每個符號在內存中都是單例。

這種特性使得它完美的哈希的鑰匙,因爲總是:長期==:長期(!「期限」 =「期限」,怎麼一回事,因爲有不同的情況下)

而在散列值,其YOUT選舉(你的情況最好的方法是字符串)

我希望這可以幫助。

+0

謝謝你的建議,我認爲它很有意義。我在代碼中實現了這樣的代碼之前,你的反應 – bokor 2010-11-19 18:41:46

+0

先試了這個,並在查看了這個視圖Alert :: SEVERITY [alert.severity.to_sym] – bokor 2010-11-19 18:42:19

+0

我不承認你,對不起:(你是否需要從視圖中訪問Alert :: SEVERITY?使用cattr_reader或在模型中創建一個類方法:def self.severity; Alert :: SEVERITY; end您可以在視圖中引入Alert.severity – pablorc 2010-11-25 09:15:16