加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何在使用render_to_string后正常渲染视图?

发布时间:2020-12-17 03:19:31 所属栏目:百科 来源:网络整理
导读:在我的Rails应用程序中,我有一个使用 XML Builder模板(rxml)模板和render_to_string创建XML文档的操作. XML文档被转发到后端服务器. 创建XML文档后,我想向浏览器发送一个普通的HTML响应,但不知何故Rails记住第一次调用render_to_string. 例如: Rails找不到
在我的Rails应用程序中,我有一个使用 XML Builder模板(rxml)模板和render_to_string创建XML文档的操作. XML文档被转发到后端服务器.

创建XML文档后,我想向浏览器发送一个普通的HTML响应,但不知何故Rails记住第一次调用render_to_string.

例如:

> Rails找不到默认视图show.html.erb,因为它查找show.rxml.
>只需在我的动作处理程序底部放置一个渲染’mycontroller / show.html.erb’,Rails就会找到模板,但是浏览器不起作用,因为响应头的内容类型是text / xml.

有没有办法使用render_to_string而不“污染”实际的浏览器响应?

编辑:似乎在Rails 2中,erase_render_results可以解决问题,但在Rails 3中它已不再可用.

解决方法

实用的答案是使用视图文件和两个渲染调用是Not The Rails方式:视图通常是发送到客户端的东西,ActionPack被设计为以这种方式工作.

也就是说,有一种简单的方法可以实现您的目标.您可以直接使用Builder :: XmlMarkup将XML生成为字符串,而不是使用ActionView:

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

看看the Builder documentation看看它是如何工作的.

您可以利用的Builder的另一个功能是使用<<来将XML内容附加到缓冲区,因此可以使用任何IO流.根据您将内容发送到其他服务器的方式,您可以很好地完成所有内容. 当然,这可能会变得非常混乱和冗长,这就是为什么你想要将这些功能封装在另一个类中,或者作为模型中的方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读