2012-07-18 6 views
7

このコード: = form_fo:store_products do | f | = f.check_box:track_inventoryなぜcheck_boxフォームヘルパーは2つのチェックボックスを生成しますか?

はこのHTMLを作成します。

<input name="product_group[products_attributes][0][store_products_attributes}[1342647745501][track_inventory]" type="hidden" value="0"> 

<input id="product_group_products_attributes_0_store_products_attributes_1342647745501_track_inventory" name="product_group[products_attributes][0][store_products_attributes][1342647745501][track_inventory]" type="checkbox" value="1"> 

最初の隠された要素の理由は何ですか?

+0

あなたは誤植があると思います。 'form_for'の代わりに' form_for'を試してみてください。 – Dougui

答えて

21

HTML仕様では、Webブラウザによってチェックされていないチェックボックスを送信しないように指示しています。つまり、チェックを外すと、フォームのチェックボックスがオフになっているかどうかのレコードがレールには受信されません。たとえば、チェックボックスが以前にチェックされたレコードを編集していて、チェックボックスをオフにすると、レールがこの属性の更新を知らない場合など、これは重要です。

隠しフィールドはチェックボックスと同じ名前なので、チェックボックスが送信されないと、代わりにhidden_​​fieldが送信されます(値が '0'の場合、チェックされていません)。このようにして、チェックボックスがオンになっているかチェックされていないかを示す信号が常にレールに送られます。

APIDockの詳細情報

関連する問題