aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack
diff options
context:
space:
mode:
authorSam Stephenson <sam@37signals.com>2005-10-10 20:35:13 +0000
committerSam Stephenson <sam@37signals.com>2005-10-10 20:35:13 +0000
commit0886bb391d97ec96d3028d5cac93ce2f7f8467e6 (patch)
tree9eb71c40c2f609d71be7032f636d4b11b8bd882a /actionpack
parente3655ef733f7f69a4b1175cd6843f8bfe4c32f5d (diff)
downloadrails-0886bb391d97ec96d3028d5cac93ce2f7f8467e6.tar.gz
rails-0886bb391d97ec96d3028d5cac93ce2f7f8467e6.tar.bz2
rails-0886bb391d97ec96d3028d5cac93ce2f7f8467e6.zip
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
Diffstat (limited to 'actionpack')
-rw-r--r--actionpack/CHANGELOG2
-rw-r--r--actionpack/lib/action_view/partials.rb7
-rw-r--r--actionpack/test/controller/new_render_test.rb10
3 files changed, 18 insertions, 1 deletions
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"]