Ticket #8900: render_partial_hash_collection.patch
| File render_partial_hash_collection.patch, 4.8 kB (added by lifofifo, 2 years ago) |
|---|
-
test/controller/new_render_test.rb
old new 157 157 def partial_with_hash_object 158 158 render :partial => "hash_object", :object => {:first_name => "Sam"} 159 159 end 160 160 161 def partial_hash_collection 162 render :partial => "hash_object", :collection => [ {:first_name => "Pratik"}, {:first_name => "Amy"} ] 163 end 164 165 def partial_hash_collection_with_locals 166 render :partial => "hash_greeting", :collection => [ {:first_name => "Pratik"}, {:first_name => "Amy"} ], :locals => { :greeting => "Hola" } 167 end 168 161 169 def partial_with_implicit_local_assignment 162 170 @customer = Customer.new("Marcel") 163 171 render :partial => "customer" … … 680 688 get :partial_with_hash_object 681 689 assert_equal "Sam", @response.body 682 690 end 691 692 def test_hash_partial_collection 693 get :partial_hash_collection 694 assert_equal "PratikAmy", @response.body 695 end 696 697 def test_partial_hash_collection_with_locals 698 get :partial_hash_collection_with_locals 699 assert_equal "Hola: PratikHola: Amy", @response.body 700 end 683 701 684 702 def test_partial_with_implicit_local_assignment 685 703 get :partial_with_implicit_local_assignment -
test/fixtures/test/_hash_greeting.erb
old new -
lib/action_view/partials.rb
old new 46 46 # This will render the partial "advertisement/_ad.erb" regardless of which controller this is being called from. 47 47 module Partials 48 48 private 49 # Deprecated, use render :partial 50 def render_partial(partial_path, local_assigns = nil, deprecated_local_assigns = nil) #:nodoc: 49 def render_partial(partial_path, object_assigns = nil, local_assigns = nil) #:nodoc: 51 50 case partial_path 52 51 when String, Symbol, NilClass 53 52 path, partial_name = partial_pieces(partial_path) 54 object = extracting_object(partial_name, local_assigns, deprecated_local_assigns) 55 local_assigns = extract_local_assigns(local_assigns, deprecated_local_assigns) 53 object = extracting_object(partial_name, object_assigns) 56 54 local_assigns = local_assigns ? local_assigns.clone : {} 57 55 add_counter_to_local_assigns!(partial_name, local_assigns) 58 56 add_object_to_local_assigns!(partial_name, local_assigns, object) … … 68 66 if partial_path.any? 69 67 path = ActionController::RecordIdentifier.partial_path(partial_path.first) 70 68 collection = partial_path 71 render_partial_collection(path, collection, nil, local_assigns.value)69 render_partial_collection(path, collection, nil, object_assigns.value) 72 70 else 73 71 "" 74 72 end 75 73 else 76 74 render_partial( 77 75 ActionController::RecordIdentifier.partial_path(partial_path), 78 local_assigns, deprecated_local_assigns)76 object_assigns, local_assigns) 79 77 end 80 78 end 81 79 82 # Deprecated, use render :partial, :collection83 80 def render_partial_collection(partial_name, collection, partial_spacer_template = nil, local_assigns = nil) #:nodoc: 84 81 collection_of_partials = Array.new 85 82 counter_name = partial_counter_name(partial_name) … … 117 114 partial_name.split('/').last.split('.').first.intern 118 115 end 119 116 120 def extracting_object(partial_name, local_assigns, deprecated_local_assigns)117 def extracting_object(partial_name, object_assigns) 121 118 variable_name = partial_variable_name(partial_name) 122 if local_assigns.is_a?(Hash) || local_assigns.nil?119 if object_assigns.nil? 123 120 controller.instance_variable_get("@#{variable_name}") 124 121 else 125 # deprecated form where object could be passed in as second parameter 126 local_assigns 122 object_assigns 127 123 end 128 124 end 129 125 130 def extract_local_assigns(local_assigns, deprecated_local_assigns)131 local_assigns.is_a?(Hash) ? local_assigns : deprecated_local_assigns132 end133 134 126 def add_counter_to_local_assigns!(partial_name, local_assigns) 135 127 counter_name = partial_counter_name(partial_name) 136 128 local_assigns[counter_name] = 1 unless local_assigns.has_key?(counter_name)