diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG
index cb88f5fa24baf0ed2580316cf80b745c294b0697..7adad721fc92f3a22a337e6c516aeda643065927 100644
--- a/actionpack/CHANGELOG
+++ b/actionpack/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Disabled checkboxes don't submit a form value. #9301 [vladr, robinjfisher]
+
* Added tests for options to ActiveRecordHelper#form. Closes #7213 [richcollins, mikong, mislav]
* Changed before_filter halting to happen automatically on render or redirect but no longer on simply returning false [DHH]
diff --git a/actionpack/lib/action_view/helpers/form_helper.rb b/actionpack/lib/action_view/helpers/form_helper.rb
index f25f47af62ca0efed1bb659f361e7f4e0f94e89a..cc81bad2b47eba68eb6fba24f929d24613ce2fa9 100644
--- a/actionpack/lib/action_view/helpers/form_helper.rb
+++ b/actionpack/lib/action_view/helpers/form_helper.rb
@@ -486,7 +486,7 @@ def to_check_box_tag(options = {}, checked_value = "1", unchecked_value = "0")
end
options["checked"] = "checked" if checked
add_default_name_and_id(options)
- tag("input", options) << tag("input", "name" => options["name"], "type" => "hidden", "value" => unchecked_value)
+ tag("input", options) << tag("input", "name" => options["name"], "type" => "hidden", "value" => options['disabled'] && checked ? checked_value : unchecked_value)
end
def to_date_tag()
diff --git a/actionpack/test/template/form_helper_test.rb b/actionpack/test/template/form_helper_test.rb
index 32529c66f7569e7233c0e2e97e1e48528d0bd94e..d00bd16ad8db0168c1791c82eb162b48cfab8597 100644
--- a/actionpack/test/template/form_helper_test.rb
+++ b/actionpack/test/template/form_helper_test.rb
@@ -172,6 +172,13 @@ def test_check_box_with_explicit_checked_and_unchecked_values
)
end
+ def test_checkbox_disabled_still_submits_checked_value
+ assert_dom_equal(
+ '',
+ check_box("post", "secret", { :disabled => :true })
+ )
+ end
+
def test_radio_button
assert_dom_equal('',
radio_button("post", "title", "Hello World")