8

このコード: =form_fo :store_products do |f| = f.check_box :track_inventory

この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">

最初の隠し要素の理由は何ですか?

4

1 に答える 1

23

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

非表示フィールドはチェックボックスと同じ名前であるため、チェックボックスが送信されない場合は、代わりにhidden_​​fieldが送信されます(値「0」はチェックされていないことを意味します)。このように、レールは、チェックボックスがオンになっているかオフになっているかに関する信号を常に受信します。

APIDockでこの落とし穴に関する詳細情報

于 2012-07-19T00:33:25.613 に答える