1

PAYMENT_METHODSという定数がvenue.rbにあります。Rails 3定数の扱い方

PAYMENT_METHODS = ['Visa', 'MasterCard', 'American Express', 'Diners', 'JCB', 'Bankomat', 'sodexo', 'MA-Gutscheine'] 

あなたは(payment_optionsは整数)の形でのお支払いの種類のチェックを外す/確認することができます。

<%= hidden_field_tag "venue[payment_options][]", nil %> 
<% Venue::PAYMENT_METHODS.each do |category| %> 
    <%= check_box_tag "venue[payment_options][]", category %> 
    <%= label_tag category %> 
<% end %> 

は今、私は選択を保存したいのですが、各チェックボックスの値は、名前です支払いオプションの私は何とか鍵をストアしなければならないと思う。

キーを設定してコレクションをデータベースに保存するにはどうすればよいですか?

+1

上のあなたの例では、ユーザが値を代わりになりたいどのように見える

? – Thilo

+0

整数の考え方(1,2,3 ...)のみをデータベースに格納します。 –

答えて

2

は、例えば、ハッシュや配列、一定に予め

おかげ

PAYMENT_METHODS = {'Visa' => 1, 'MasterCard' => 2, 'American Express' => 3, 'Diners' => 4, 'JCB' => 5, 'Bankomat' => 6, 'sodexo' => 7, 'MA-Gutscheine' => 8 } 

これらは今、あなたがoptions_for_selecthttp://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-options_for_selectに渡すことができる形式になります。

(実際に)チェックボックスが必要な場合は、配列は問題ありません。PAYMENT_MTHODS.each_index do |index|をループオーバーして値のイテレータを取得し、PAYMENT_METHODS[index]を使用します。

ハッシュキーがリストに表示される部分ですが、値がオプションの値に関連付けられていることがわかりました:-)。

+0

thxは、選択タグでうまく機能します。しかし、私は人々が複数の支払いオプションをチェックできる解決策が必要です。 –

+0

これはあなたの質問であり、チェックボックスを実行する方法を追加しました: –

1

文字列値自体に何も問題はありません。

その優れたPaymentTypeようなモデルを作成し、ちょうどid,nameを維持し、ビューに(必要に応じて)あなたがより良い管理パネルから、将来的にすべての利用可能な支払いオプションを操作することができ、すべての支払いtypes.Thisの道をレンダリングするのではなく、コードに行きますレベルで変化し、定数で変化する。

+0

thx、それについても考えましたが、それはdb内に1つ以上のテーブルがあることを意味します。 –

0

要素のインデックスをキーとして使用できます。あなたの利益のためにArray#indexを使用してください。

PAYMENT_METHODS.index("Visa") #=> 0 
PAYMENT_METHODS[0]    #=> "Visa" 

PAYMENT_METHODS.index("Diners") #=> 3 
PAYMENT_METHODS[3]    #=> "Diners" 

注意の言葉:あなたがPAYMENT_METHODSを並べ替える場合、これは壊れます。配列の相対位置に要素をキー入力しています。配列を変更し、キーを変更します。あなたの定数を維持することによってトラブルを避ける定数。よろしくで

+0

仮想属性を追加して、このプロセスを自動化することもできます。 – ayckoster

0

に私はいつもそれが奇数のハッシュキーがリストに表示された部分であることを発見したが、私はそれは価値がオプションの値に関連付けられているものであることを理にかなっていると思います: - )。

あなたはそれが

<% Post::TECH_CATEGORY.each do |category| %> 
    <%= label_tag 'name', category[0] %> 
    <%= check_box_tag 'tech_cat', category[1] %> 
<% end %> 

を(それは同様私にビットを盗聴された)によって行わ取得することができますそれは今、私は、画面上でそれを見ることができるという意味があります。各オブジェクトには2つの値があるため、...

category[0] 

はいつもあなたが現在

category[1] 

上に列挙される特定のオブジェクトは、同じオブジェクトの値となりますため、あなたが与えキーになります。画面上の見栄えが良くなります。

<label for="name"> Visa </label> 
<input id="tech_cat" name="tech_cat" type="checkbox" value="1" /> 

乾杯、

関連する問題