From 4e097556d3cb968228935c62812fa0bbc374e093 Mon Sep 17 00:00:00 2001 From: Takumi Shotoku Date: Wed, 4 Nov 2020 03:27:51 +0900 Subject: [PATCH] [v6.1.0.rc1] Fix regression for select tag helper with array (#40522) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix regression for select tag helper with array v6.1.0.rc1 does not generate DOM with the selected attribute when the object's method returns an array. This is because it has been changed by #34809 to always convert to a string. This commit fixes the issue. ## Steps to reproduce ```ruby # frozen_string_literal: true require "bundler/inline" gemfile(true) do source "https://rubygems.org" git_source(:github) { |repo| "https://github.com/#{repo}.git" } gem "rails", ENV["RAILS_VERSION"] end require "action_view" require "minitest/autorun" class BugTest < ActionView::TestCase Post = Struct.new("Post", :tags) def test_stuff @post = Post.new @post.tags = ["foo", "bar"] expected = <<~DOM.strip DOM assert_dom_equal(expected, select("post", "tags", %W(foo bar buz), { multiple: true })) end end ``` The test succeeds on v6.0.3.4, but the test fails on v6.1.0.rc1. * Update actionview/lib/action_view/helpers/tags/select.rb [Takumi Shotoku + Rafael Mendonça França] --- actionview/lib/action_view/helpers/tags/select.rb | 2 +- actionview/test/template/form_options_helper_test.rb | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/actionview/lib/action_view/helpers/tags/select.rb b/actionview/lib/action_view/helpers/tags/select.rb index 33c9b77d8d..dec19bcfd2 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.to_s }, + selected: @options.fetch(:selected) { value.nil? ? "" : value }, disabled: @options[:disabled] } diff --git a/actionview/test/template/form_options_helper_test.rb b/actionview/test/template/form_options_helper_test.rb index a27f039994..952f05b7ec 100644 --- a/actionview/test/template/form_options_helper_test.rb +++ b/actionview/test/template/form_options_helper_test.rb @@ -851,6 +851,15 @@ class FormOptionsHelperTest < ActionView::TestCase ) end + def test_select_with_array + @continent = Continent.new + @continent.countries = ["Africa", "Europe"] + assert_dom_equal( + %(), + select("continent", "countries", %W(Africa Europe America), { multiple: true }) + ) + end + def test_required_select assert_dom_equal( %(),