9

チェックボックスを使用できるようにしたいので、通常はチェックボックスにラベルforを追加して、チェックボックスを「狙う」代わりにテキストを選択できるようにします。

問題は、Railsでネストされた属性フォームを使用している場合はどうなるかということです。私は今のところこのコードを持っています:

%ul
  - test_category.test_cases.each do |test_case|
    %li
      = check_box_tag "job_test_cases[]", "#{test_case.id}", test_case.id
      = label_tag "test_case_#{test_case.id}", test_case.name

これに関する問題は、これを生成することです。

<li>
  <input type="checkbox" value="70" name="job_test_cases[]" id="job_test_cases_" checked="checked">
  <label for="test_case_70">Blah blah</label>
</li>

私はそれをこのようにしたかったのに対し:

<li>
  <input type="checkbox" value="70" name="test_case_id[]" id="test_case_70" checked="checked">
  <label for="test_case_70">Blah BLah blah/label>
</li>
4

3 に答える 3

8

次のように、チェックボックスをラベルと一致させることができました。

チェックボックス: check_box_tag を使用し、特定のアイテム名 (ここでは役割) を配列のインデックスとして指定して、値を含む ID を生成しました。:name ハッシュ値を渡して、check_box_tag で指定された名前をオーバーライドし、id を持たないようにしました。

check_box_tag "user[roles][#{role.to_s}]", role.to_s, @user.has_role?(role), :name => "user[roles][]"

次の HTML を生成します。

<input id="user_roles_ROLE1" name="user[roles][]" type="checkbox" value="ROLE1" />

ラベルでは、配列名 + '_' と項目名 (ここではロール) を使用して ID を指定し、ラベル内の ID を適切に指すようにしました。

label_tag "user_roles_#{role}", cur_role.role_name, :class => 'span_after_label'

次の HTML を生成します。

<label class="span_after_label" for="user_roles_ROLE1">User</label>

PUT がコントローラーに送信されると、params には次のフィールドがあります。

"user"=>{ ..., "roles"=>["ROLE1", "ROLE2", "ROLE3"], ... }

これは、チェックされたすべてのロールのロール名です。

したがって、あなたのコードでは、次のことを試します。

check_box_tag "test_case_id[#{test_case.id}]", "#{test_case.id}", test_case.id, :name => "test_case_id[]"
于 2011-12-03T00:19:43.043 に答える
0

ネストされたフォームを実行するときはfields_for、フィールドの名前が正しいことを確認する必要があります (の代わりにeach)。

formtasticcocoonを見ることをお勧めします。これにより、ネストされたフォームが大幅に簡素化されます。

[編集: 自分でやる]

私はあなたのコードを修正できるかどうか確信が持てません. あなたはそれを送りません。それはIDではありえません。したがって、通常は次のように記述します。コードを修正すると、次のようになります。

check_box_tag "test_case[#{test_case.id}]", test_case.is_checked?

フィールドis_checked?は何らかのブール値を返します。あなたがやろうとしていることについてもう少し情報を提供していただけると助かると思います。

それは次のようなものを生成します

<input type="checkbox" value="true" name="test_case[70]" id="test_case_70" checked="checked">

is_checked?返されtrueます。

id明示的に名前を付けたい場合はname、次のように明示的に設定する必要があります。

check_box_tag "test_case[#{test_case.id}]", test_case.is_checked?, test_case.is_checked?, :name => 'bla', :id => 'other_bla'
于 2011-02-18T07:14:20.393 に答える