diff options
author | Scott Barron <scott@elitists.net> | 2005-10-15 02:53:21 +0000 |
---|---|---|
committer | Scott Barron <scott@elitists.net> | 2005-10-15 02:53:21 +0000 |
commit | f8f4eccd9afa1ed665980a3c5b1651f25956798a (patch) | |
tree | 1d8cfee79245e147235465c366183c542ff2a64e | |
parent | 00a194d73915aa86ff3a95302fe0c367c836e2a0 (diff) | |
download | rails-f8f4eccd9afa1ed665980a3c5b1651f25956798a.tar.gz rails-f8f4eccd9afa1ed665980a3c5b1651f25956798a.tar.bz2 rails-f8f4eccd9afa1ed665980a3c5b1651f25956798a.zip |
If a component redirects when called with render_component_as_string, render the
redirected to action.
Fixes #2327
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2604 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
-rw-r--r-- | actionpack/lib/action_controller/components.rb | 9 | ||||
-rw-r--r-- | actionpack/test/controller/components_test.rb | 28 |
2 files changed, 34 insertions, 3 deletions
diff --git a/actionpack/lib/action_controller/components.rb b/actionpack/lib/action_controller/components.rb index 409998525d..312595c21f 100644 --- a/actionpack/lib/action_controller/components.rb +++ b/actionpack/lib/action_controller/components.rb @@ -38,7 +38,14 @@ module ActionController #:nodoc: # Returns the component response as a string def render_component_as_string(options) #:doc: - component_logging(options) { component_response(options, false).body } + component_logging(options) do + response = component_response(options, false) + unless response.redirected_to.nil? + render_component_as_string response.redirected_to + else + response.body + end + end end private diff --git a/actionpack/test/controller/components_test.rb b/actionpack/test/controller/components_test.rb index b1aa80304c..de7e8f7260 100644 --- a/actionpack/test/controller/components_test.rb +++ b/actionpack/test/controller/components_test.rb @@ -26,11 +26,19 @@ class CallerController < ActionController::Base end def set_flash - render_component(:controller => 'callee', :action => 'set_flash') + render_component(:controller => "callee", :action => "set_flash") end def use_flash - render_component(:controller => 'callee', :action => 'use_flash') + render_component(:controller => "callee", :action => "use_flash") + end + + def calling_redirected + render_component(:controller => "callee", :action => "redirected") + end + + def calling_redirected_as_string + render_template "<%= render_component(:controller => 'callee', :action => 'redirected') %>" end def rescue_action(e) raise end @@ -53,6 +61,10 @@ class CalleeController < ActionController::Base def use_flash render :text => flash[:notice] || 'no flash' end + + def redirected + redirect_to :controller => "callee", :action => "being_called" + end def rescue_action(e) raise end end @@ -97,4 +109,16 @@ class ComponentsTest < Test::Unit::TestCase get :use_flash assert_equal 'no flash', @response.body end + + def test_component_redirect_redirects + get :calling_redirected + + assert_redirected_to :action => "being_called" + end + + def test_component_as_string_redirect_renders_redirecte_action + get :calling_redirected_as_string + + assert_equal "Lady of the House, speaking", @response.body + end end
\ No newline at end of file |