Skip to content

Commit

Permalink
Always include the options :include_blank if the select has a require…
Browse files Browse the repository at this point in the history
…d attribute

and display size 1 and not multiple attribute,  Fixes rails#5908
  • Loading branch information
angelo giovanni capilleri authored and Angelo Capilleri committed May 13, 2012
1 parent beea9f5 commit 64af96b
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 0 deletions.
5 changes: 5 additions & 0 deletions actionpack/lib/action_view/helpers/tags/base.rb
Expand Up @@ -121,6 +121,7 @@ def sanitized_value(value)
def select_content_tag(option_tags, options, html_options)
html_options = html_options.stringify_keys
add_default_name_and_id(html_options)
options[:include_blank] = true if option_required?(html_options)
select = content_tag("select", add_options(option_tags, options, value(object)), html_options)

if html_options["multiple"] && options.fetch(:include_hidden, true)
Expand All @@ -129,6 +130,10 @@ def select_content_tag(option_tags, options, html_options)
select
end
end

def option_required?(html_options)
html_options["required"] && html_options["size"].to_i == 1 && !html_options["multiple"]
end

def add_options(option_tags, options, value = nil)
if options[:include_blank]
Expand Down
21 changes: 21 additions & 0 deletions actionpack/test/template/form_options_helper_test.rb
Expand Up @@ -633,7 +633,28 @@ def test_select_with_nil
select("post", "category", [nil, "othervalue"])
)
end

def test_select_with_included_and_display_size_equals_to_one
assert_dom_equal(
"<select id=\"post_category\" name=\"post[category]\" required=\"required\" size=\"1\"><option value=\"\"></option>\n<option value=\"abe\">abe</option>\n<option value=\"mus\">mus</option>\n<option value=\"hest\">hest</option></select>",
select("post", "category", %w( abe mus hest),{}, :required => true, :size => 1)
)
end

def test_select_with_included_and_display_size_no_equals_to_one
assert_dom_equal(
"<select id=\"post_category\" name=\"post[category]\" required=\"required\" size=\"2\"><option value=\"abe\">abe</option>\n<option value=\"mus\">mus</option>\n<option value=\"hest\">hest</option></select>",
select("post", "category", %w( abe mus hest),{}, :required => true, :size => 2)
)
end

def test_select_with_included_and_multiple
assert_dom_equal(
"<input name=\"post[category][]\" type=\"hidden\" value=\"\"/><select id=\"post_category\" multiple=\"multiple\" name=\"post[category][]\" required=\"required\" size=\"1\"><option value=\"abe\">abe</option>\n<option value=\"mus\">mus</option>\n<option value=\"hest\">hest</option></select>",
select("post", "category", %w( abe mus hest), {}, :required => true, :size => 1, :multiple => true)
)
end

def test_select_with_fixnum
@post = Post.new
@post.category = ""
Expand Down

0 comments on commit 64af96b

Please sign in to comment.