11

シンボルの配列を記述する、MyModelシリアライズされた属性を持つモデルがあります。a

このコードは機能します:

<% form_for @my_model do |f| %>
  <%= f.select :a, MyModel::AS, :multiple => true) %>
<% end %>

パラメータは正しいです:

{ :my_model => { :a => [:a_value1, :a_value2] } }

この複数選択を、次のように一連のチェックボックスに変換したい:

<% form_for @my_model do |f| %>
  <% MyModel::AS.each do |a_value|
    <%= f.check_box(:a_value) %>
  <% end %>
<% end %>

それも機能しますが、パラメータはまったく同じではありません:

{ :my_model => { :a_value1 => 1, :a_value2 => 1 } }

最初の解決策に戻るには、2 つの解決策を考えます...

  • mycheck_boxcheck_box_tagに変換し、複数選択を置き換え、ユーザーが check_box_tags をクリックしたときに選択値を「チェック」するための JavaScript を追加します。次に、パラメーターはコントローラーで直接同じになります。
  • パラメータを「適応」させるために、コントローラーに小さなコードを追加します。

醜くない解決策は何ですか?それとも他にありますか?

4

4 に答える 4

34

私が知らなかった「複数」オプションを使用して、解決策を見つけました。

<% MyModel::AS.each do |a_value| %>
  <%= f.check_box(:a, { :multiple => true }, a_value) %>
<% end %>

結果パラメータは少し奇妙ですが、うまくいくはずです。

{"my_model" => { "a" => ["0", "a_value1", "0", "a_value2", "0"] }

@Viren から編集:nilのような関数の最後に渡す

  <%= f.check_box(:a, { :multiple => true }, a_value, nil) %>

完璧に動作します。

于 2013-04-09T13:24:40.410 に答える