diff --git a/actionview/CHANGELOG.md b/actionview/CHANGELOG.md index de5478968d..976e1b8b8e 100644 --- a/actionview/CHANGELOG.md +++ b/actionview/CHANGELOG.md @@ -1,3 +1,30 @@ +* `ActionView::Helpers::FormOptionsHelper#select` should mark option for `nil` as selected. + + ```ruby + @post = Post.new + @post.category = nil + + # Before + select("post", "category", none: nil, programming: 1, economics: 2) + # => + # + + # After + select("post", "category", none: nil, programming: 1, economics: 2) + # => + # + ``` + + *bogdanvlviv* + * Log lines for partial renders and started template renders are now emitted at the `DEBUG` level instead of `INFO`. diff --git a/actionview/lib/action_view/helpers/tags/select.rb b/actionview/lib/action_view/helpers/tags/select.rb index 172e3a9226..33c9b77d8d 100644 --- a/actionview/lib/action_view/helpers/tags/select.rb +++ b/actionview/lib/action_view/helpers/tags/select.rb @@ -15,7 +15,7 @@ module ActionView def render option_tags_options = { - selected: @options.fetch(:selected) { value }, + selected: @options.fetch(:selected) { value.to_s }, disabled: @options[:disabled] } diff --git a/actionview/test/template/form_options_helper_test.rb b/actionview/test/template/form_options_helper_test.rb index 273646b077..bfe9ac8d41 100644 --- a/actionview/test/template/form_options_helper_test.rb +++ b/actionview/test/template/form_options_helper_test.rb @@ -826,6 +826,24 @@ class FormOptionsHelperTest < ActionView::TestCase ) end + def test_select_with_nil_as_selected_value + @post = Post.new + @post.category = nil + assert_dom_equal( + "", + select("post", "category", none: nil, programming: 1, economics: 2) + ) + end + + def test_select_with_nil_and_selected_option_as_nil + @post = Post.new + @post.category = nil + assert_dom_equal( + "", + select("post", "category", { none: nil, programming: 1, economics: 2 }, { selected: nil }) + ) + end + def test_required_select assert_dom_equal( %(),