如何直接从 Rails 控制器返回 HTML?
Posted
技术标签:
【中文标题】如何直接从 Rails 控制器返回 HTML?【英文标题】:How to return HTML directly from a Rails controller? 【发布时间】:2009-12-24 15:43:47 【问题描述】:我的一个模型对象有一个“文本”列,其中包含网页的完整 html。
我想编写一个控制器动作,直接从控制器返回这个 HTML,而不是像控制器上的其他动作那样通过 .erb 模板传递它。
我的第一个想法是将这个动作拉到一个新的控制器中并制作一个带有空布局的自定义 .erb 模板,模板中只有 <%= modelObject.htmlContent %>
- 但我想知道在 Rails 中是否有更好的方法来做到这一点.
【问题讨论】:
【参考方案1】:在您的控制器respond_to
块中,您可以使用:
render :text => @model_object.html_content
或:
render :inline => "<%= @model_object.html_content %>"
所以,类似:
def show
@model_object = ModelObject.find(params[:id])
respond_to do |format|
format.html render :text => @model_object.html_content
end
end
【讨论】:
api.rubyonrails.org/classes/ActionView/Rendering.html 的(稀疏)文档,以防其他人正在寻找它! :) 真的有必要使用respond_to
块吗? render :text => '<h1>text</h1>'
在 Rails 4 中对我来说工作得很好。我虽然 respond_to
只是为了处理多个 Accept-Types。
Rails 5 在使用 render text: …
时会产生弃用警告。如果要呈现 HTML,请使用 render html: …
,对于文本使用 render plain: …
。【参考方案2】:
至少在最新的 Rails (4.1.x) 中,这比公认的答案要简单得多:
def show
render html: '<div>html goes here</div>'.html_safe
end
【讨论】:
【参考方案3】:它对我有用
def show
@model_object = ModelObject.find(params[:id])
respond_to do |format|
format.html render :inline => "<%== @model_object['html'] %>"
end
end
【讨论】:
以上是关于如何直接从 Rails 控制器返回 HTML?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 AJAX 请求将用户在类变量中的 HTML5 位置从 JavaScript 传递到 Rails 控制器?
rails如何从命令行调用运行本地服务器的控制器操作[重复]