From 9a3e7ac2e088516961686be55ef1cbb76a76f8e0 Mon Sep 17 00:00:00 2001 From: Alex Chrome Date: Wed, 28 Jul 2010 14:10:39 +0700 Subject: [PATCH] Added :format option for form_for helper and spec for this [#5226 state:resolved] --- actionpack/lib/action_view/helpers/form_helper.rb | 10 +++++++++- actionpack/test/template/form_helper_test.rb | 20 ++++++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/actionpack/lib/action_view/helpers/form_helper.rb b/actionpack/lib/action_view/helpers/form_helper.rb index ebe055b..a4fdbd4 100644 --- a/actionpack/lib/action_view/helpers/form_helper.rb +++ b/actionpack/lib/action_view/helpers/form_helper.rb @@ -202,6 +202,12 @@ module ActionView # ... # <% end %> # + # You can also set the answer format, like this: + # + # <%= form_for(@post, :format => :json) do |f| %> + # ... + # <% end %> + # # If you have an object that needs to be represented as a different # parameter, like a Client that acts as a Person: # @@ -332,7 +338,9 @@ module ActionView options[:html] ||= {} options[:html].reverse_merge!(html_options) - options[:url] ||= polymorphic_path(object_or_array) + options[:url] ||= options[:format] ? \ + polymorphic_path(object_or_array, :format => options.delete(:format)) : \ + polymorphic_path(object_or_array) end # Creates a scope around a specific model object like form_for, but diff --git a/actionpack/test/template/form_helper_test.rb b/actionpack/test/template/form_helper_test.rb index 9086a23..3194bdf 100644 --- a/actionpack/test/template/form_helper_test.rb +++ b/actionpack/test/template/form_helper_test.rb @@ -625,6 +625,18 @@ class FormHelperTest < ActionView::TestCase assert_dom_equal expected, output_buffer end + def test_form_for_with_format + form_for(@post, :format => :json, :html => { :id => "edit_post_123", :class => "edit_post" }) do |f| + concat f.label(:title) + end + + expected = whole_form("/posts/123.json", "edit_post_123" , "edit_post", :method => "put") do + "" + end + + assert_dom_equal expected, output_buffer + end + def test_form_for_with_symbol_object_name form_for(@post, :as => "other_name", :html => { :id => 'create-post' }) do |f| concat f.label(:title, :class => 'post_title') @@ -1745,8 +1757,12 @@ class FormHelperTest < ActionView::TestCase "/posts" end - def post_path(post) - "/posts/#{post.id}" + def post_path(post, options = {}) + if options[:format] + "/posts/#{post.id}.#{options[:format]}" + else + "/posts/#{post.id}" + end end def protect_against_forgery? -- 1.6.6