diff --git a/actionview/lib/action_view/helpers/tags/select_renderer.rb b/actionview/lib/action_view/helpers/tags/select_renderer.rb index 0c80694e5a30b..d841ff5d9e89f 100644 --- a/actionview/lib/action_view/helpers/tags/select_renderer.rb +++ b/actionview/lib/action_view/helpers/tags/select_renderer.rb @@ -40,7 +40,7 @@ def add_options(option_tags, options, value = nil) option_tags = tag_builder.content_tag_string("option", content, value: "", label: label) + "\n" + option_tags end - if value.blank? && options[:prompt] + if value != false && value.blank? && options[:prompt] tag_options = { value: "" }.tap do |prompt_opts| prompt_opts[:disabled] = true if options[:disabled] == "" prompt_opts[:selected] = true if options[:selected] == "" diff --git a/actionview/test/template/form_options_helper_test.rb b/actionview/test/template/form_options_helper_test.rb index d48c3bea8cf13..f2c86c6ce1f31 100644 --- a/actionview/test/template/form_options_helper_test.rb +++ b/actionview/test/template/form_options_helper_test.rb @@ -790,7 +790,7 @@ def test_select_with_default_prompt ) end - def test_select_no_prompt_when_select_has_value + def test_select_no_prompt_when_attribute_has_non_blank_string_value @post = Post.new @post.category = "" assert_dom_equal( @@ -799,7 +799,16 @@ def test_select_no_prompt_when_select_has_value ) end - def test_select_with_given_prompt + def test_select_no_prompt_when_attribute_has_false_value + @post = Post.new + @post.allow_comments = false + assert_dom_equal( + "", + select("post", "allow_comments", [false, true], prompt: true) + ) + end + + def test_select_with_given_prompt_for_blank_string_value @post = Post.new @post.category = "" assert_dom_equal( @@ -808,6 +817,15 @@ def test_select_with_given_prompt ) end + def test_select_with_given_prompt_for_nil_value + @post = Post.new + @post.allow_comments = nil + assert_dom_equal( + "", + select("post", "allow_comments", [false, true], prompt: "The prompt") + ) + end + def test_select_with_given_prompt_escaped @post = Post.new assert_dom_equal(