add 'include_hidden' option to select tag, closes #5402

This commit is contained in:
Vasiliy Ermolovich 2012-03-13 19:59:04 +03:00
parent 21b69b233b
commit 54a75e1a0f
4 changed files with 14 additions and 1 deletions

View File

@ -1,5 +1,7 @@
## Rails 4.0.0 (unreleased) ##
* Add `include_hidden` option to select tag. With `:include_hidden => true` select with `multiple` attribute doesn't generate hidden input with blank value. *Vasiliy Ermolovich*
* Removed default `size` option from the `text_field`, `search_field`, `telephone_field`, `url_field`, `email_field` helpers. *Philip Arndt*
* Removed default `cols` and `rows` options from the `text_area` helper. *Philip Arndt*

View File

@ -153,6 +153,8 @@ module ActionView
# form, and parameters extraction gets the last occurrence of any repeated
# key in the query string, that works for ordinary forms.
#
# In case if you don't want the helper to generate this hidden field you can specify <tt>:include_blank => false</tt> option.
#
def select(object, method, choices, options = {}, html_options = {})
Tags::Select.new(object, method, self, choices, options, html_options).render
end

View File

@ -122,7 +122,8 @@ module ActionView
html_options = html_options.stringify_keys
add_default_name_and_id(html_options)
select = content_tag("select", add_options(option_tags, options, value(object)), html_options)
if html_options["multiple"]
if html_options["multiple"] && options.fetch(:include_hidden) { true }
tag("input", :disabled => html_options["disabled"], :name => html_options["name"], :type => "hidden", :value => "") + select
else
select

View File

@ -529,6 +529,14 @@ class FormOptionsHelperTest < ActionView::TestCase
)
end
def test_select_with_multiple_and_without_hidden_input
output_buffer = select(:post, :category, "", {:include_hidden => false}, :multiple => true)
assert_dom_equal(
"<select multiple=\"multiple\" id=\"post_category\" name=\"post[category][]\"></select>",
output_buffer
)
end
def test_select_with_multiple_and_disabled_to_add_disabled_hidden_input
output_buffer = select(:post, :category, "", {}, :multiple => true, :disabled => true)
assert_dom_equal(