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

Nat*_*ate 68 ruby-on-rails

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

我想编写一个控制器动作,它只是直接从控制器返回这个HTML,而不是通过.erb模板传递它,就像控制器上的其他动作一样.

我的第一个想法是将此操作拉入一个新的控制器并使用空布局创建一个自定义.erb模板,并且只是<%= modelObject.htmlContent %>在模板中 - 但我想知道是否有更好的方法在Rails中执行此操作.

Dan*_*vin 91

在控制器respond_to块中,您可以使用:

render :text => @model_object.html_content
Run Code Online (Sandbox Code Playgroud)

要么:

render :inline => "<%= @model_object.html_content %>"
Run Code Online (Sandbox Code Playgroud)

所以,像:

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

  respond_to do |format|
    format.html { render :text => @model_object.html_content }
  end
end
Run Code Online (Sandbox Code Playgroud)

  • 是否真的有必要使用`respond_to`块?`render:text =>'<h1> text </ h1>'`在Rails 4中对我来说很好.我虽然`respond_to`只是处理多个Accept-Types. (7认同)
  • 使用`render text:...`时,Rails 5会产生弃用警告.如果你想渲染HTML,使用`render html:...`,文本使用`render plain:...`. (5认同)
  • (稀疏)文档在http://api.rubyonrails.org/classes/ActionView/Rendering.html,以防其他人正在寻找它!:) (4认同)

Vin*_*Woo 58

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

def show
  render html: '<div>html goes here</div>'.html_safe
end
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢,它也适用于rails 5 api-only :) (2认同)