2016-04-11 14 views
1

私はRails 4でアプリケーションを作ろうとしています。私はフォームに単純なフォームを使用します。Rails 4 -Simpleフォームキーと表示値を保存する方法

私のモデルには「self_governance」という属性があります。

私は5つのレベルを定義することができるようにヘルパーメソッドを作成しましたが、この属性はこの属性に格納できますが、オプションとして(1,5 ...ではなく)ユーザに表示されます。

私のヘルパーで

、私が持っている:私のフォームで

module PreferencesHelper 

    def self_gov_selector 
     [ 
      [ 'tier 1','1'], 
      [ 'tier 2','2'], 
      [ 'tier 3','3'], 
      [ 'tier 4','4'], 
      [ 'tier 5','5'], 
     ] 
    end 

を、私は、持っている:

<%= f.input :self_governance, :label => "Select your tier", collection: self_gov_selector %> 

その後、私のショーでは、私が「階層を表示する方法を把握しようとしています'1'の代わりに '1'を使用します。

私が試してみました:

<%= @preference.self_governance %> 

<%= @preference.self_gov_selector %> 

私は働く何かを見つけることができません。これらのビューはすべて、ビューにティア1の代わりに1を表示します。

どうすればこの作品を作成できますか?

答えて

0

フォームによって投稿されたparamsは、配列の2番目の値のみを含むため、データベーステーブルに値として整数を格納している可能性があります。お好みのモデルでは

簡単な解決策は、あなたがそれが表す値に保存している整数をマップするためにenumを使用することです

enum self_governance: { 
          tier_1: 1, 
          tier_2: 2, 
          tier_3: 3, 
          tier_4: 4, 
          tier_5: 5 
         } 

次に、あなたのビューには、それに応じて更新します:

<%= @preference.self_governance.try(:humanize) %> 

EDIT:

このアプローチの追加ボーナスは、あなたが直接列挙型を呼び出して、あなたのヘルパーメソッドを置き換えることができるということです。非常に

f.input :self_governance, as: :select, label: "your label", collection: Preference.self_governances.map { |key, val| [key.humanize, val] } 
+0

ありがとう! – Mel

+0

実際には - これを試してみると、このエラーが発生します:#<クラス:0x007fde5b9fb500>のための未定義のメソッド 'self_governance ' 意味しましたか? self_governances – Mel

+0

はい: 'Preference.self_governances.map {| key、val | [key.humanize、val]} 'は動作するはずです。遅れて返信して申し訳ありません。 –

関連する問題