Могу ли я получить доступ к response.body в действии перед его возвратом в rails? - PullRequest
6 голосов
/ 22 февраля 2011

Могу ли я получить доступ к response.body в действии до того, как оно вернется?

Скажем, я хочу сделать некоторые окончательные замены строк, прежде чем он вернется. Могу ли я получить доступ к response.body, т.е. к ответу, возвращаемому представлением?

Ответы [ 4 ]

12 голосов
/ 23 ноября 2012

Попробуйте after_filter в вашем контроллере.

Вы сможете редактировать свой response.body оттуда.Для меня мне нужно было удалить некоторые символы ASCII в xml, поэтому я сделал это.

after_filter :sanitize_xml

def sanitize_xml
   #clean the response body by accessing response.body
6 голосов
/ 22 февраля 2011

Вы можете написать промежуточное программное обеспечение для таких замен. Код для стойки есть.

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

включите его в некоторый файл, давайте назовем его dump_response.rb в папке RAILS_ROOT / lib. И линия

use Dump::Response

в config.ru

1 голос
/ 31 июля 2012

Вы можете просто переписать рендер рендера в контроллере, например так:

def render *args, &block
  super
  response.body.gsub!(/blah/,'')
end
1 голос
/ 03 июля 2012

Путь бедняка заключается в следующем:

str = render_to_string "mycontroller/mytemplate"
str.gsub!(/blah/,'')
render :text => str 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...