2010-11-19 74 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