diff options
author | Michael Koziarski <michael@koziarski.com> | 2009-09-13 10:32:24 +1200 |
---|---|---|
committer | Michael Koziarski <michael@koziarski.com> | 2009-09-13 10:32:24 +1200 |
commit | 81cba78e9eec5c5f36c575b14b3fa20cec383f15 (patch) | |
tree | d1142d2ae96d734ff4d91105c6e320119338e3f1 /actionpack/lib/action_view | |
parent | 76cd4cb27e2ec197c7f62082334d5d7211fd2d19 (diff) | |
parent | 26639e8a4558a844e2e374b2916545c3e717b387 (diff) | |
download | rails-81cba78e9eec5c5f36c575b14b3fa20cec383f15.tar.gz rails-81cba78e9eec5c5f36c575b14b3fa20cec383f15.tar.bz2 rails-81cba78e9eec5c5f36c575b14b3fa20cec383f15.zip |
Merge commit 'alloy/master-nested_attributes_and_autosave'
Diffstat (limited to 'actionpack/lib/action_view')
-rw-r--r-- | actionpack/lib/action_view/helpers/form_helper.rb | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/actionpack/lib/action_view/helpers/form_helper.rb b/actionpack/lib/action_view/helpers/form_helper.rb index 81029102b1..32b9c4a7dd 100644 --- a/actionpack/lib/action_view/helpers/form_helper.rb +++ b/actionpack/lib/action_view/helpers/form_helper.rb @@ -449,6 +449,15 @@ module ActionView # <% end %> # <% end %> # + # Or a collection to be used: + # + # <% form_for @person, :url => { :action => "update" } do |person_form| %> + # ... + # <% person_form.fields_for :projects, @active_projects do |project_fields| %> + # Name: <%= project_fields.text_field :name %> + # <% end %> + # <% end %> + # # When projects is already an association on Person you can use # +accepts_nested_attributes_for+ to define the writer method for you: # @@ -1037,18 +1046,21 @@ module ActionView def fields_for_with_nested_attributes(association_name, args, block) name = "#{object_name}[#{association_name}_attributes]" - association = @object.send(association_name) - explicit_object = args.first.to_model if args.first.respond_to?(:to_model) + association = args.first.to_model if args.first.respond_to?(:to_model) + + if association.respond_to?(:new_record?) + association = [association] if @object.send(association_name).is_a?(Array) + elsif !association.is_a?(Array) + association = @object.send(association_name) + end if association.is_a?(Array) - children = explicit_object ? [explicit_object] : association explicit_child_index = args.last[:child_index] if args.last.is_a?(Hash) - - children.map do |child| + association.map do |child| fields_for_nested_model("#{name}[#{explicit_child_index || nested_child_index(name)}]", child, args, block) end.join - else - fields_for_nested_model(name, explicit_object || association, args, block) + elsif association + fields_for_nested_model(name, association, args, block) end end |