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

Ruby on rails 如何直接从Rails控制器返回HTML?,ruby-on-rails,Ruby On Rails,我的一个模型对象有一个“文本”列,其中包含网页的完整HTML 我想编写一个控制器操作,直接从控制器返回这个HTML,而不是像控制器上的其他操作一样通过.erb模板传递 我的第一个想法是将此操作拉到一个新的控制器中,并创建一个带有空布局的自定义.erb模板,只在模板中添加——但我想知道是否有更好的方法在Rails中实现这一点 在控制器的respond_to块中,您可以使用: render :text => @model_object.html_content 或: 它对我有用 def sh

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

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


我的第一个想法是将此操作拉到一个新的控制器中,并创建一个带有空布局的自定义.erb模板,只在模板中添加
——但我想知道是否有更好的方法在Rails中实现这一点

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

render :text => @model_object.html_content
或:

它对我有用

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

   respond_to do |format|
    format.html { render :inline => "<%== @model_object['html'] %>" }
  end
end
def显示
@model\u object=ModelObject.find(参数[:id])
回应待办事项|格式|
format.html{render:inline=>“”
结束
结束
至少在最新的Rails(4.1.x)中,这比公认的答案要简单得多:

def show
  render html: '<div>html goes here</div>'.html_safe
end
def显示
呈现html:“html在此显示”。html\u安全
结束

(稀疏)文档位于,以防其他人查找它!:)是否确实需要使用
respond\u to
块<代码>渲染:text=>“text”在Rails 4中对我来说很好。我认为
respond\u to
只是为了处理多个接受类型。Rails 5在使用
render text:…
时会产生一个弃用警告。如果要呈现HTML,请使用
呈现HTML:…
,对于文本,请使用
呈现纯文本:…
def show
  @model_object = ModelObject.find(params[:id])

   respond_to do |format|
    format.html { render :inline => "<%== @model_object['html'] %>" }
  end
end
def show
  render html: '<div>html goes here</div>'.html_safe
end