Прагматичный ответ заключается в том, что использование файла представления и двух вызовов для рендеринга - это не путь Rails: представления, как правило, отправляются клиенту, и ActionPack спроектирован таким образом.
Тем не менее, есть простой способ достичь того, что вы пытаетесь сделать. Вместо того, чтобы использовать ActionView, вы можете напрямую использовать Builder :: XmlMarkup для генерации XML в виде строки:
def action_in_controller
buffer = ""
xml = Builder::XmlMarkup.new(buffer)
# build your XML - essentially copy your view.xml.builder file here
xml.element("value")
xml.element("value")
# send the contents of buffer to your 3rd server
# allow your controller to render your view normally
end
Взгляните на документацию Builder , чтобы увидеть, как она работает.
Другая особенность Builder, которой вы можете воспользоваться, это то, что содержимое XML добавляется в буфер с помощью <<
, поэтому можно использовать любой поток ввода-вывода. В зависимости от того, как вы отправляете контент на другой сервер, вы можете довольно просто обернуть его.
Конечно, это может оказаться очень запутанным и длинным, поэтому вы хотите инкапсулировать этот бит функциональности в другом классе или как метод в вашей модели.