diff --git a/actionpack/lib/action_view/helpers/form_helper.rb b/actionpack/lib/action_view/helpers/form_helper.rb
index dec1ae6e4f..8c300ec745 100644
--- a/actionpack/lib/action_view/helpers/form_helper.rb
+++ b/actionpack/lib/action_view/helpers/form_helper.rb
@@ -303,9 +303,15 @@ module ActionView
options[:html] ||= {}
- object = record.is_a?(Array) ? record.last : record
- object_name = options[:as] || ActiveModel::Naming.param_key(object)
- apply_form_for_options!(record, options)
+ case record
+ when String, Symbol
+ object_name = record
+ object = nil
+ else
+ object = record.is_a?(Array) ? record.last : record
+ object_name = options[:as] || ActiveModel::Naming.param_key(object)
+ apply_form_for_options!(record, options)
+ end
options[:html][:remote] = options.delete(:remote)
builder = options[:parent_builder] = instantiate_builder(object_name, object, options, &proc)
diff --git a/actionpack/test/template/erb/form_for_test.rb b/actionpack/test/template/erb/form_for_test.rb
index 02f07496e0..e722b40a9a 100644
--- a/actionpack/test/template/erb/form_for_test.rb
+++ b/actionpack/test/template/erb/form_for_test.rb
@@ -1,11 +1,10 @@
require "abstract_unit"
require "template/erb/helper"
-require "controller/fake_models"
module ERBTest
class TagHelperTest < BlockTestCase
test "form_for works" do
- output = render_content "form_for(Post.new, :url => {:controller => 'blah', :action => 'update'})", ""
+ output = render_content "form_for(:staticpage, :url => {:controller => 'blah', :action => 'update'})", ""
assert_match %r{
.*}, output
end
end
diff --git a/actionpack/test/template/erb/helper.rb b/actionpack/test/template/erb/helper.rb
index fb9d0315f3..799f9e4036 100644
--- a/actionpack/test/template/erb/helper.rb
+++ b/actionpack/test/template/erb/helper.rb
@@ -4,8 +4,6 @@ module ERBTest
include ActionView::Helpers::TagHelper
include ActionView::Helpers::JavaScriptHelper
include ActionView::Helpers::FormHelper
- include ActionView::Context
- include ActionController::RecordIdentifier
attr_accessor :output_buffer, :controller
@@ -22,4 +20,4 @@ module ERBTest
"<%= #{str} do %>#{rest}<% end %>"
end
end
-end
+end
\ No newline at end of file
diff --git a/actionpack/test/template/form_helper_test.rb b/actionpack/test/template/form_helper_test.rb
index 7179ae4e9c..2c60096475 100644
--- a/actionpack/test/template/form_helper_test.rb
+++ b/actionpack/test/template/form_helper_test.rb
@@ -781,6 +781,23 @@ class FormHelperTest < ActionView::TestCase
assert_dom_equal expected, output_buffer
end
+ def test_form_for_without_object
+ form_for(:post, :html => { :id => 'create-post' }) do |f|
+ concat f.text_field(:title)
+ concat f.text_area(:body)
+ concat f.check_box(:secret)
+ end
+
+ expected = whole_form("/", "create-post") do
+ "" +
+ "" +
+ "" +
+ ""
+ end
+
+ assert_dom_equal expected, output_buffer
+ end
+
def test_form_for_with_index
form_for(@post, :as => "post[]") do |f|
concat f.label(:title)
@@ -850,6 +867,22 @@ class FormHelperTest < ActionView::TestCase
I18n.locale = old_locale
end
+ def test_submit_without_object_and_locale_strings
+ old_locale, I18n.locale = I18n.locale, :submit
+
+ form_for(:post) do |f|
+ concat f.submit :class => "extra"
+ end
+
+ expected = whole_form do
+ ""
+ end
+
+ assert_dom_equal expected, output_buffer
+ ensure
+ I18n.locale = old_locale
+ end
+
def test_submit_with_object_and_nested_lookup
old_locale, I18n.locale = I18n.locale, :submit