From 7621d131d2b8f7b65f7f06615e6714d8f4605439 Mon Sep 17 00:00:00 2001 From: Gaston Ramos Date: Sat, 23 Jul 2011 20:46:06 -0300 Subject: - added test case for issue: https://github.com/rails/rails/issues/1951 Namespaced model partial_path is wrong in namespaced controllers --- actionpack/test/controller/render_test.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'actionpack') diff --git a/actionpack/test/controller/render_test.rb b/actionpack/test/controller/render_test.rb index be59da9105..99d6be7af3 100644 --- a/actionpack/test/controller/render_test.rb +++ b/actionpack/test/controller/render_test.rb @@ -14,6 +14,14 @@ module Fun end end +module Quiz + class QuestionsController < ActionController::Base + def new + render :partial => Quiz::Question.new(:name => "Bruce Lee") + end + end +end + class TestController < ActionController::Base protect_from_forgery @@ -1251,6 +1259,12 @@ class RenderTest < ActionController::TestCase assert_template('fun/games/_form') end + def test_namespaced_object_partial + @controller = Quiz::QuestionsController.new + get :new + assert_equal "Namespaced Partial", @response.body + end + def test_partial_collection get :partial_collection assert_equal "Hello: davidHello: mary", @response.body -- cgit v1.2.3 From dc1b0fd957246a05f7b490aa03970bcdcc9c48ba Mon Sep 17 00:00:00 2001 From: Gaston Ramos Date: Sat, 23 Jul 2011 20:49:16 -0300 Subject: - added ActionView::PartialRenderer#merge_path_into_partial(path, partial) fix issues/1951 --- .../lib/action_view/renderer/partial_renderer.rb | 18 ++++++++++++++++-- actionpack/test/controller/render_test.rb | 2 +- 2 files changed, 17 insertions(+), 3 deletions(-) (limited to 'actionpack') diff --git a/actionpack/lib/action_view/renderer/partial_renderer.rb b/actionpack/lib/action_view/renderer/partial_renderer.rb index 51c784493e..c0ac332c4e 100644 --- a/actionpack/lib/action_view/renderer/partial_renderer.rb +++ b/actionpack/lib/action_view/renderer/partial_renderer.rb @@ -362,14 +362,28 @@ module ActionView def partial_path(object = @object) @partial_names[object.class.name] ||= begin object = object.to_model if object.respond_to?(:to_model) - object.class.model_name.partial_path.dup.tap do |partial| path = @lookup_context.prefixes.first - partial.insert(0, "#{File.dirname(path)}/") if partial.include?(?/) && path.include?(?/) + merge_path_into_partial(path, partial) end end end + def merge_path_into_partial(path, partial) + if path.include?(?/) && partial.include?(?/) + overlap = [] + path_array = File.dirname(path).split('/') + partial_array = partial.split('/')[0..-3] # skip model dir & partial + + path_array.each_with_index do |dir, index| + overlap << dir if dir == partial_array[index] + end + + partial.gsub!(/^#{overlap.join('/')}\//,'') + partial.insert(0, "#{File.dirname(path)}/") + end + end + def retrieve_variable(path) variable = @options[:as].try(:to_sym) || path[%r'_?(\w+)(\.\w+)*$', 1].to_sym variable_counter = :"#{variable}_counter" if @collection diff --git a/actionpack/test/controller/render_test.rb b/actionpack/test/controller/render_test.rb index 99d6be7af3..ce4b407c7d 100644 --- a/actionpack/test/controller/render_test.rb +++ b/actionpack/test/controller/render_test.rb @@ -17,7 +17,7 @@ end module Quiz class QuestionsController < ActionController::Base def new - render :partial => Quiz::Question.new(:name => "Bruce Lee") + render :partial => Quiz::Question.new("Namespaced Partial") end end end -- cgit v1.2.3