2016-10-02 7 views
1

のは、私がGateオブジェクトのための私のフォームで、次の選択ボックスがあるとしましょう:Railsフォームで、オプションをデータベースにハッシュとして保存するかどうかを選択できますか?

f.select(:type_use, options_for_select([['Enter & Exit', 8], 
             ['Only Enter', 4], 
             ['Only Exit', 4], 
             ['Only Enter for visitors', 2], 
             ['Only Exit for visitors', 2]], 
             @gate.type_use), 
             { :include_blank => '- select -' }, 
             { :class => 'form-control'}) 

これらのオプションは変更されることはありません。 4と8のような整数は1日あたりのサイクル数を表し、後でこの整数を使って計算を行います。しかし、私はまだ私のビューで使用するために、各整数の正しい文字列のラベルを保持したいので、私は、ゲートが '唯一の出口'タイプの使用を示すことができます。

したがって、選択オプションをハッシュとして保存することはできますか?または、Railsはアプリケーションで使用するために整数を文字列にマップする方法がありますか?

これまでは、文字列値を保存してから、ifステートメントを使用して、計算に先立って文字列値に基づいて対応する整数を手動で変数に割り当てていました。しかし、私はまだこれを行うためのより効率的かつエレガントな方法を発見していない。

私の研究で私はEnumsに関する情報を見つけましたが、私は重複した整数を持っているためこの状況に当てはまるとは思わないし、Enumは私には連続したインデックスのようです。また、あなたがHashを保存したいModelSerializeを使用してHashArrayを保存することができ、選択ボックス内のハッシュに関する他の質問ではなく、ハッシュ

+0

あなたは「これらのオプションは決して言わなかったことを考えるとhstore拡張を有効にしてからの移行でそれを使用する必要があり、それを使用するにはHash

で検索やインデックスの項目を実行することができます変更 "なぜあなたはこれをデータベースに保存したいのですか?いくつかのイニシャライザで定数を定義することをお勧めしますか?例えばconstants.rb? –

+0

私が完全に従うかどうかわからない...それぞれの 'gate'は、これらの5つのオプションのうちの1つを選択します。その選択を保存する必要があります。文字列と整数の両方の値を保存する必要はありませんが、それは本当です。しかし、私は少なくとも1つを保存する必要があります。 – Ren

+0

hstoreはおそらくあなたが以下のREをしたいと思っています。私はちょうどあなたが "ああ、2を意味する定数のいくつかの並べ替えを持つことができたときにDBに文字列を格納する理由を理解していないと言っている '2つの'訪問者のためだけに入力"、しかし問題はあなたです複数のIDが同じ文字列にマッピングされているようです... –

答えて

1

として保存するよりも、ハッシュで選択するためのオプションを移入を中心に展開しているようですまたはArray

例:

class User < Active::Record 

    serialize :data, Hash   # for hash 
    serialize :other_data, Array # for array 

end 

あなたがHashを保存することができますpostgresの中hstoreと呼ばれるDataTypeもありますデータと、あなたが最初に

.... add_column :data_set, :hstore, default: {} 
+0

答えに感謝します...私がPostgresを使用すると、hstoreオプションが優先されますか? – Ren

+0

今のところ最良の選択肢は 'Postgres jsonb'だと思われます。ここでそれについて読むためのリンクです:http://dba.stackexchange.com/questions/115825/jsonb-with-indexing-vs-hstore#115849 – blnc

関連する問題