Rails:直接从控制器呈现HTML。

时间:2016-08-08 17:31:18

标签: html ruby-on-rails ajax

我需要一些帮助来回应我的AJAX调用。这就是我想要做的事情:

  1. 对我的Rails应用程序进行AJAX调用以获取HTML文档。
  2. 在Rails控制器中,从磁盘读取HTML文档。然后使用“render html:@htmldoc”
  3. 将文档发送到视图
  4. 在视图中,我在div中有一个标记ID“lesson”。使用具有HTML文档的AJAX调用的响应,我将doc放入“lesson”标记中。但是HTML被渲染为带有“lesson”标签的TEXTNODE,而我需要将其呈现为HTML。
  5. 以下是我在new.html.erb中的观点:

        <div id="lesson">
          <h2>Choose a lesson on the left panel to start your study module.</h2>
        </div>
        <div>
          <button type="button" class="btn btn-primary"id="btn_next">Next</button>
        </div>
    

    这是我在new.html.erb中的AJAX调用:

        $(document).ready(function(){
          $("#btn_next").click(function(){
          $.ajax({
            type:'POST',
            url:'/study',
            data: { id: "demo.html" },
            success:function(result){
              $("#lesson").html(result);
            }
          });
        });
    

    });

    这是我的routes.rb:

        get     '/study',           to: 'study_sessions#new'
        post    '/study',           to: 'study_sessions#create'
    

    这是我在控制器中的代码:

        def create
          @filename = params[:id]
          @htmldoc = File.read("public/uploads/#{@filename}") if File.exist("public/uploads/#{@filename}")
          render html: @htmldoc
        end
    

    这是我的demo.html文件:

        <table class="table table-striped">
          <th>Head 1</th><th>Head 2</th>
          <tr><td>Row 1</td><td>row 1</td></tr>
          <tr><td>Row 2</td><td>row 2</td></tr>
        </table>
    

    以下是我在点击按钮之前从浏览器查看的结果:

        Choose a lesson on the left panel to start your study module.
    

    点击按钮后的结果如下:

        <table class="table table-striped"> <th>Head 1</th><th>Head 2</th<tr><td>Row 1</td><td>row 1</td></tr> <tr><td>Row 2</td><td>row 2</td></tr> </table>
    

    我希望demo.html文件将呈现为一个漂亮的HTML表格,而不是一串文字。

    非常感谢所有帮助人员!

1 个答案:

答案 0 :(得分:1)

您需要告诉rails使用.html_safe方法将其呈现为html内容。尝试这样做:

render html: @htmldoc.html_safe