mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Test for extractable_options? within nested fields_for.
This fixes an error when a record object that is a subclass of Hash is passed to fields_for, which is incorrectly interpreted as field options.
This commit is contained in:
parent
2df2bfdb4b
commit
e69eed0e10
2 changed files with 19 additions and 1 deletions
|
@ -1241,7 +1241,7 @@ module ActionView
|
|||
end
|
||||
|
||||
def fields_for(record_name, record_object = nil, fields_options = {}, &block)
|
||||
fields_options, record_object = record_object, nil if record_object.is_a?(Hash)
|
||||
fields_options, record_object = record_object, nil if record_object.is_a?(Hash) && record_object.extractable_options?
|
||||
fields_options[:builder] ||= options[:builder]
|
||||
fields_options[:parent_builder] = self
|
||||
|
||||
|
|
|
@ -1689,6 +1689,24 @@ class FormHelperTest < ActionView::TestCase
|
|||
assert_dom_equal expected, output_buffer
|
||||
end
|
||||
|
||||
def test_nested_fields_for_with_hash_like_model
|
||||
@author = Author.new
|
||||
def @author.is_a?(klass); klass == Hash; end
|
||||
def @author.extractable_options?; false; end
|
||||
|
||||
form_for(@post) do |f|
|
||||
concat f.fields_for(:author, @author) { |af|
|
||||
concat af.text_field(:name)
|
||||
}
|
||||
end
|
||||
|
||||
expected = whole_form('/posts/123', 'edit_post_123', 'edit_post', :method => 'put') do
|
||||
'<input id="post_author_attributes_name" name="post[author_attributes][name]" size="30" type="text" value="new author" />'
|
||||
end
|
||||
|
||||
assert_dom_equal expected, output_buffer
|
||||
end
|
||||
|
||||
def test_fields_for
|
||||
output_buffer = fields_for(:post, @post) do |f|
|
||||
concat f.text_field(:title)
|
||||
|
|
Loading…
Reference in a new issue