diff --git a/actionpack/lib/action_view/helpers/form_helper.rb b/actionpack/lib/action_view/helpers/form_helper.rb
index 63c5fd57aa9d3..b8600fe4457fb 100644
--- a/actionpack/lib/action_view/helpers/form_helper.rb
+++ b/actionpack/lib/action_view/helpers/form_helper.rb
@@ -614,23 +614,27 @@ def add_default_name_and_id(options)
end
def tag_name
- "#{@object_name}[#{@method_name}]"
+ "#{@object_name}[#{sanitized_method_name}]"
end
def tag_name_with_index(index)
- "#{@object_name}[#{index}][#{@method_name}]"
+ "#{@object_name}[#{index}][#{sanitized_method_name}]"
end
def tag_id
- "#{sanitized_object_name}_#{@method_name}"
+ "#{sanitized_object_name}_#{sanitized_method_name}"
end
def tag_id_with_index(index)
- "#{sanitized_object_name}_#{index}_#{@method_name}"
+ "#{sanitized_object_name}_#{index}_#{sanitized_method_name}"
end
def sanitized_object_name
- @object_name.gsub(/[^-a-zA-Z0-9:.]/, "_").sub(/_$/, "")
+ @sanitized_object_name ||= @object_name.gsub(/[^-a-zA-Z0-9:.]/, "_").sub(/_$/, "")
+ end
+
+ def sanitized_method_name
+ @sanitized_method_name ||= @method_name.sub(/\?$/,"")
end
end
diff --git a/actionpack/test/template/form_helper_test.rb b/actionpack/test/template/form_helper_test.rb
index 204575fd895d9..4538b6dc6f6cb 100644
--- a/actionpack/test/template/form_helper_test.rb
+++ b/actionpack/test/template/form_helper_test.rb
@@ -6,6 +6,7 @@
alias_method :title_before_type_cast, :title unless respond_to?(:title_before_type_cast)
alias_method :body_before_type_cast, :body unless respond_to?(:body_before_type_cast)
alias_method :author_name_before_type_cast, :author_name unless respond_to?(:author_name_before_type_cast)
+ alias_method :secret?, :secret
def new_record=(boolean)
@new_record = boolean
@@ -71,10 +72,12 @@ def test_label
'',
label("post", "title", nil, :class => 'title_label')
)
+ assert_dom_equal('', label("post", "secret?"))
end
def test_label_with_symbols
assert_dom_equal('', label(:post, :title))
+ assert_dom_equal('', label(:post, :secret?))
end
def test_label_with_for_attribute_as_symbol
@@ -140,6 +143,8 @@ def test_text_field_doesnt_change_param_values
def test_hidden_field
assert_dom_equal '',
hidden_field("post", "title")
+ assert_dom_equal '',
+ hidden_field("post", "secret?")
end
def test_hidden_field_with_escapes
@@ -172,6 +177,10 @@ def test_check_box
'',
check_box("post", "secret")
)
+ assert_dom_equal(
+ '',
+ check_box("post", "secret?")
+ )
end
def test_check_box_with_explicit_checked_and_unchecked_values