代码之家  ›  专栏  ›  技术社区  ›  Nate

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

  •  63
  • Nate  · 技术社区  · 16 年前

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

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

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

    3 回复  |  直到 16 年前
        1
  •  89
  •   Dan McNevin    16 年前

    在你的控制器里 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
    
        2
  •  48
  •   Vincent Woo    9 年前

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

    def show
      render html: '<div>html goes here</div>'.html_safe
    end
    
        3
  •  3
  •   Selvamani    12 年前

    它对我有用

    def show
      @model_object = ModelObject.find(params[:id])
    
       respond_to do |format|
        format.html { render :inline => "<%== @model_object['html'] %>" }
      end
    end