From 0886bb391d97ec96d3028d5cac93ce2f7f8467e6 Mon Sep 17 00:00:00 2001 From: Sam Stephenson Date: Mon, 10 Oct 2005 20:35:13 +0000 Subject: [PATCH] Fixed that an instance variable with the same name as a partial should be implicitly passed as the partial :object. Closes #2269. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2522 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/CHANGELOG | 2 ++ actionpack/lib/action_view/partials.rb | 7 ++++++- actionpack/test/controller/new_render_test.rb | 10 ++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index c7fdff5cd3..7ff6276841 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Fixed that an instance variable with the same name as a partial should be implicitly passed as the partial :object #2269 [court3nay] + * Update Prototype to V1.4.0_pre11, script.aculo.us to [2502] [Thomas Fuchs] * Make assert_tag :children count appropriately. Closes #2181. [jamie@bravenet.com] diff --git a/actionpack/lib/action_view/partials.rb b/actionpack/lib/action_view/partials.rb index 998956979d..21292161ea 100644 --- a/actionpack/lib/action_view/partials.rb +++ b/actionpack/lib/action_view/partials.rb @@ -52,7 +52,7 @@ module ActionView local_assigns = extract_local_assigns(local_assigns, deprecated_local_assigns) local_assigns = local_assigns ? local_assigns.clone : {} add_counter_to_local_assigns!(partial_name, local_assigns) - local_assigns[partial_name.intern] ||= object.is_a?(ActionView::Base::ObjectWrapper) ? object.value : object + add_object_to_local_assigns!(partial_name, local_assigns, object) ActionController::Base.benchmark("Rendered #{path}/_#{partial_name}", Logger::DEBUG, false) do render("#{path}/_#{partial_name}", local_assigns) @@ -111,5 +111,10 @@ module ActionView counter_name = partial_counter_name(partial_name) local_assigns[counter_name] = 1 unless local_assigns.has_key?(counter_name) end + + def add_object_to_local_assigns!(partial_name, local_assigns, object) + local_assigns[partial_name.intern] ||= object.is_a?(ActionView::Base::ObjectWrapper) ? object.value : object + local_assigns[partial_name.intern] ||= controller.instance_variable_get("@#{partial_name}") + end end end diff --git a/actionpack/test/controller/new_render_test.rb b/actionpack/test/controller/new_render_test.rb index a1af0a0091..24c3a0e765 100644 --- a/actionpack/test/controller/new_render_test.rb +++ b/actionpack/test/controller/new_render_test.rb @@ -106,6 +106,11 @@ class NewRenderTestController < ActionController::Base render :partial => "hash_object", :object => {:first_name => "Sam"} end + def partial_with_implicit_local_assignment + @customer = Customer.new("Marcel") + render :partial => "customer" + end + def hello_in_a_string @customers = [ Customer.new("david"), Customer.new("mary") ] render :text => "How's there? #{render_to_string("test/list")}" @@ -380,6 +385,11 @@ class NewRenderTest < Test::Unit::TestCase assert_equal "Sam", @response.body end + def test_partial_with_implicit_local_assignment + get :partial_with_implicit_local_assignment + assert_equal "Hello: Marcel", @response.body + end + def test_render_text_with_assigns get :render_text_with_assigns assert_equal "world", assigns["hello"]