aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/lib')
-rw-r--r--actionpack/lib/action_view/helpers/form_helper.rb15
-rw-r--r--actionpack/lib/action_view/partials.rb3
2 files changed, 18 insertions, 0 deletions
diff --git a/actionpack/lib/action_view/helpers/form_helper.rb b/actionpack/lib/action_view/helpers/form_helper.rb
index f67a040149..d2835a2438 100644
--- a/actionpack/lib/action_view/helpers/form_helper.rb
+++ b/actionpack/lib/action_view/helpers/form_helper.rb
@@ -32,6 +32,15 @@ module ActionView
# <input name="commit" type="submit" value="Create" />
# </form>
#
+ # If you are using a partial for your form fields, you can use this shortcut:
+ #
+ # <% form_for :person, @person, :url => { :action => "create" } do |f| %>
+ # <%= render :partial => f %>
+ # <%= submit_tag 'Create' %>
+ # <% end %>
+ #
+ # This example will render the <tt>people/_form</tt> partial, setting a local variable called <tt>form</tt> which references the yielded FormBuilder.
+ #
# The <tt>params</tt> object created when this form is submitted would look like:
#
# {"action"=>"create", "controller"=>"persons", "person"=>{"first_name"=>"William", "last_name"=>"Smith"}}
@@ -153,6 +162,12 @@ module ActionView
# <%= check_box_tag "person[admin]", @person.company.admin? %>
# <% end %>
#
+ # In this case, if you use this:
+ #
+ # <%= render :partial => f %>
+ #
+ # The rendered template is <tt>people/_labelling_form</tt> and the local variable referencing the form builder is called <tt>labelling_form</tt>.
+ #
# In many cases you will want to wrap the above in another helper, so you could do something like the following:
#
# def labelled_form_for(record_or_name_or_array, *args, &proc)
diff --git a/actionpack/lib/action_view/partials.rb b/actionpack/lib/action_view/partials.rb
index 0795b8ec55..a1ba60d560 100644
--- a/actionpack/lib/action_view/partials.rb
+++ b/actionpack/lib/action_view/partials.rb
@@ -119,6 +119,9 @@ module ActionView
else
render("#{path}/_#{partial_name}", local_assigns)
end
+ when ActionView::Helpers::FormBuilder
+ builder_partial_path = partial_path.class.to_s.demodulize.underscore.sub(/_builder$/, '')
+ render_partial(builder_partial_path, object_assigns, (local_assigns || {}).merge(builder_partial_path.to_sym => partial_path))
when Array, ActiveRecord::Associations::AssociationCollection, ActiveRecord::Associations::HasManyThroughAssociation
if partial_path.any?
path = ActionController::RecordIdentifier.partial_path(partial_path.first)