我需要一串html(类似“< html>< body> Hello World< / body>< / html>”)来传真.
我把它写成了一个单独的erb文件:views / orders / _fax.html.erb,
并尝试渲染erb:html_data = render(:partial =>’fax’).
以下是引发问题的控制器的一部分:
respond_to do |format| if @order.save html_data = render(:partial => 'fax') response = fax_machine.send_fax(html_data) ...... format.html { redirect_to @order,notice: 'Order was successfully created.' } format.json { render json: @order,status: :created,location: @order } else format.html { render action: "new" } format.json { render json: @order.errors,status: :unprocessable_entity } end end
它给了我一个AbstractController :: DoubleRenderError如下:
AbstractController::DoubleRenderError in OrdersController#create Render and/or redirect were called multiple times in this action. Please note that you may only call render OR redirect,and at most once per action. Also note that neither redirect nor render terminate execution of the action,so if you want to exit an action after redirecting,you need to do something like "redirect_to(...) and return".
如何解决这个问题呢?
解决方法
如果您只需要渲染的HTML,并且不需要控制器中的任何功能,您可以尝试直接在辅助类中使用ERB,例如:
module FaxHelper def to_fax html = File.open(path_to_template).read template = ERB.new(html) template.result end end
ERB docs更详细地解释了这一点.
编辑
要从控制器获取实例变量,请将绑定传递给结果调用,例如:
# controller to_fax(binding) # helper class def to_fax(controller_binding) html = File.open(path_to_template).read template = ERB.new(html) template.result(controller_binding) end
注意:我从来没有这样做过,但似乎可行:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。