From f8f4eccd9afa1ed665980a3c5b1651f25956798a Mon Sep 17 00:00:00 2001 From: Scott Barron Date: Sat, 15 Oct 2005 02:53:21 +0000 Subject: [PATCH] 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 --- .../lib/action_controller/components.rb | 9 +++++- 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 @@ def render_component(options = {}) #:doc: # 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 @@ def internal_callee 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 @@ def set_flash 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 @@ def test_flash 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 -- GitLab