allowing double render in rails3

I migrated the actionwebservice gem to rails3. Inside actionwebservice (server-side) there is the option to test your SOAP interface. What this does, under the cover, is first handle the SOAP-request (and render the result), and then wrap those results inside a HTML-view. Very nice. To circumvent the double render exception in rails2 you had to call a function erase_render_results. Unfortunately this function is no longer available in rails3. Luckily the fix is quite easy (but it took me a while to find). Inside actionwebservice the following function was called inside a controller to allow a second render: [ruby] def reset_invocation_response erase_render_results response.instance_variable_set :@header, Rack::Utils::HeaderHash.new(::ActionController::Response::DEFAULT_HEADERS.merge("cookie" => [])) end [/ruby] To make this work in rails3, you just have to write: [ruby] def reset_invocation_response self.instance_variable_set(:@_response_body, nil) response.instance_variable_set :@header, Rack::Utils::HeaderHash.new("cookie" => [], 'Content-Type' => 'text/html') end [/ruby] So in short: to allow a second render, you have to
  • set the controller's instance variable @_response_body to nil
  • reset the content-header
Hope this helps.
Comments
Abid 2012-05-04 11:10:01 UTC

Hi I am trying to get actionwebservice work with rails 3. I have been trying for days, but I am getting various errors including uninitialized constant ActionWebService I have not been able to install it correctly, wandering while searching I read your post, Can you help me out with some instructions(steps) to get it working on rails 3 ?

Add comment

Recent comments

Tags