2010-11-19 16 views
0

モデルでカテゴリや型ハッシュや配列を使用する方法を実際に理解したかったのですが、ちょっと混乱しているような気がします。ここに私がやろうとしていることがあり、私はどんな助けにも感謝します。Ruby on Rails - 選択タグのモデルハッシュ

私は自分のアプリケーションにAlert Modelを持っていましたが、もともとは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

選択方法は次の形式と3番目の引数として配列を必要とする:

[["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"} %> 

そして配列にメソッドを渡します。

FYI、2番目のオプション(私のSEVERITYハッシュ)は、Rubyでは(このfogetを知っていれば):1つ、2つ、3つはSymbolクラスのインスタンスです。 シンボルクラスは特別な種類の文字列です。すべてのシンボルはメモリ内のシングルトンです。

この特性は、ハッシュのキーにそれは完璧作っ常に理由:用語==:用語(!「期間」=「期間」、異なるインスタンスがあるbeacuse)

とハッシュの値については、そのYOUT選挙(あなたの場合、最良のアプローチは弦です)

私はこれが役立つことを望みます。

+0

提案いただきありがとうございます、私はそれがたくさんの意味をなすと思います。 – bokor

+0

が最初にこれを試してみましたが、これをビューで検索しましたAlert :: SEVERITY [alert.severity.to_sym] – bokor

+0

私はあなたに嫌われていません。ビューからAlert :: SEVERITYにアクセスする必要がありますか?cattr_readerを使用するか、モデル内でクラスメソッドを作成します。def self.severity; Alert :: SEVERITY; endそして、Alert.severityビューで取り込むことができます – pablorc

関連する問題