提交 3c8c3798 编写于 作者: J José Valim

Merge pull request #1778 from spohlenz/hash-models

Fix nested fields_for when Hash-based model is passed.
......@@ -1241,7 +1241,7 @@ def fields_for_with_index(record_name, record_object = nil, fields_options = {},
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
......
......@@ -170,6 +170,17 @@ class Author < Comment
def post_attributes=(attributes); end
end
class HashBackedAuthor < Hash
extend ActiveModel::Naming
include ActiveModel::Conversion
def persisted?; false; end
def name
"hash backed author"
end
end
module Blog
def self._railtie
self
......
......@@ -1689,6 +1689,22 @@ def test_nested_fields_uses_unique_indices_for_different_collection_associations
assert_dom_equal expected, output_buffer
end
def test_nested_fields_for_with_hash_like_model
@author = HashBackedAuthor.new
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="hash backed 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)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册