diff options
author | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2015-09-26 01:51:41 -0300 |
---|---|---|
committer | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2015-09-26 01:51:41 -0300 |
commit | 5b648356019d9c263f40a1f2091b2e1bbb2114e9 (patch) | |
tree | 3907edac68183db718cfa60b7e1d5cc759e8d1bc /actionview | |
parent | fa6807721297fb66917a8e1397791216ecba3b33 (diff) | |
parent | 7089768b700f79b2ae5171dc434ef45d16d18a63 (diff) | |
download | rails-5b648356019d9c263f40a1f2091b2e1bbb2114e9.tar.gz rails-5b648356019d9c263f40a1f2091b2e1bbb2114e9.tar.bz2 rails-5b648356019d9c263f40a1f2091b2e1bbb2114e9.zip |
Merge pull request #21431 from ojab/master
Handle nested fields_for by adding indexes to record_name
Diffstat (limited to 'actionview')
-rw-r--r-- | actionview/lib/action_view/helpers/form_helper.rb | 9 | ||||
-rw-r--r-- | actionview/test/template/form_helper_test.rb | 21 |
2 files changed, 29 insertions, 1 deletions
diff --git a/actionview/lib/action_view/helpers/form_helper.rb b/actionview/lib/action_view/helpers/form_helper.rb index 5a9a5d6d18..610f5c0b4a 100644 --- a/actionview/lib/action_view/helpers/form_helper.rb +++ b/actionview/lib/action_view/helpers/form_helper.rb @@ -1617,7 +1617,14 @@ module ActionView @auto_index end - record_name = index ? "#{object_name}[#{index}][#{record_name}]" : "#{object_name}[#{record_name}]" + record_name = if index + "#{object_name}[#{index}][#{record_name}]" + elsif record_name.to_s.end_with?('[]') + record_name = record_name.to_s.sub(/(.*)\[\]$/, "[\\1][#{record_object.id}]") + "#{object_name}#{record_name}" + else + "#{object_name}[#{record_name}]" + end fields_options[:child_index] = index @template.fields_for(record_name, record_object, fields_options, &block) diff --git a/actionview/test/template/form_helper_test.rb b/actionview/test/template/form_helper_test.rb index 2fc381c93d..41f31f1582 100644 --- a/actionview/test/template/form_helper_test.rb +++ b/actionview/test/template/form_helper_test.rb @@ -2297,6 +2297,27 @@ class FormHelperTest < ActionView::TestCase assert_dom_equal expected, output_buffer end + def test_deep_nested_fields_for + @comment.save + form_for(:posts) do |f| + f.fields_for('post[]', @post) do |f2| + f2.text_field(:id) + @post.comments.each do |comment| + concat f2.fields_for('comment[]', comment) { |c| + concat c.text_field(:name) + } + end + end + end + + expected = whole_form do + "<input name='posts[post][0][comment][1][name]' type='text' id='posts_post_0_comment_1_name' value='comment #1' />" + end + + assert_dom_equal expected, output_buffer + end + + def test_nested_fields_for_with_nested_collections form_for(@post, as: 'post[]') do |f| concat f.text_field(:title) |