在rails中,我可以在操作返回之前访问response.body吗?

时间:2011-02-22 15:23:35

标签: ruby-on-rails ruby

在rails中,我可以在操作返回之前访问response.body吗?

假设我想在返回之前做一些最终的字符串替换,是否可以访问response.body,即视图返回的响应?

4 个答案:

答案 0 :(得分:11)

在控制器中尝试after_filter。

您应该可以从那里编辑您的response.body。对我来说,我需要删除xml中的一些ASCII字符,因此我就这样做了。

after_filter :sanitize_xml

def sanitize_xml
   #clean the response body by accessing response.body

答案 1 :(得分:6)

您可以编写机架中间件来进行此类替换。机架代码是。

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

将它包含在某个文件中,让我们在RAILS_ROOT / lib文件夹中将其命名为dump_response.rb。 和行

use Dump::Response

在config.ru中

答案 2 :(得分:1)

穷人的方法是这样做:

str = render_to_string "mycontroller/mytemplate"
str.gsub!(/blah/,'')
render :text => str 

答案 3 :(得分:1)

您可以简单地在控制器中覆盖rails render函数,如下所示:

def render *args, &block
  super
  response.body.gsub!(/blah/,'')
end