In rails, can I access response.body in a action before it returns?
Say I want to do some final string replacements before it returns, can I get access to response.b
The poor-man's way is to do this:
str = render_to_string "mycontroller/mytemplate"
str.gsub!(/blah/,'')
render :text => str
Try after_filter in your controller.
You should be able to edit your response.body from there. For me, I needed to remove some ASCII characters in the xml hence I did this.
after_filter :sanitize_xml
def sanitize_xml
#clean the response body by accessing response.body
You can write a rack middleware to do such kind of replacements. Code for the rack is.
module Dump
require 'rack'
class Response
def initialize(app)
@app=app
end
def call(env)
res=@app.call(env)
res.body #change this and but also update res.length and header["Content-Length"]
return res
end
end
end
include it in some file, lets call it dump_response.rb in RAILS_ROOT/lib folder. And line
use Dump::Response
in config.ru
You can simply overwrite rails render function in a controller, like this:
def render *args, &block
super
response.body.gsub!(/blah/,'')
end