aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2011-07-23 21:00:11 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2011-07-23 21:00:11 -0700
commitd33eb07543aed1a07f9efe40ff7edc983b401957 (patch)
treeceaaa5d7ba9edca54e599d80bd44840511333860 /actionpack
parentd89a33d16216c9c3be719bda735bdc7a7f4bda00 (diff)
parentdc1b0fd957246a05f7b490aa03970bcdcc9c48ba (diff)
downloadrails-d33eb07543aed1a07f9efe40ff7edc983b401957.tar.gz
rails-d33eb07543aed1a07f9efe40ff7edc983b401957.tar.bz2
rails-d33eb07543aed1a07f9efe40ff7edc983b401957.zip
Merge pull request #2233 from gramos/fix-issue-1951-master
Fix issue 1951 master Namespaced model partial_path is wrong in namespaced controllers
Diffstat (limited to 'actionpack')
-rw-r--r--actionpack/lib/action_view/renderer/partial_renderer.rb18
-rw-r--r--actionpack/test/controller/render_test.rb14
2 files changed, 30 insertions, 2 deletions
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 be59da9105..ce4b407c7d 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("Namespaced Partial")
+ 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