如何从 Rails 控制器直接返回 HTML?

我的一个模型对象有一个“文本”列,其中包含网页的完整 HTML。

我想编写一个控制器操作,它直接从控制器返回这个 HTML,而不是通过。Erb 模板与控制器上的其他操作类似。

我的第一个想法是把这个动作放到一个新的控制器中,然后定制一个。Erb 模板的布局是空的,模板中只有 <%= modelObject.htmlContent %>-但是我想知道在 Rails 中是否有更好的方法来实现这一点。

82183 次浏览

在控制器 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

对我有用

def show
@model_object = ModelObject.find(params[:id])


respond_to do |format|
format.html { render :inline => "<%== @model_object['html'] %>" }
end
end

至少在最新的 Rails (4.1.x)中,这比公认的答案要简单得多:

def show
render html: '<div>html goes here</div>'.html_safe
end