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

Rails:直接从控制器呈现HTML。,html,ruby-on-rails,ajax,Html,Ruby On Rails,Ajax,我需要一些帮助来回复AJAX调用。以下是我想做的: 对我的Rails应用程序进行AJAX调用以获取HTML文档 在Rails控制器内部,从磁盘读取HTML文档。然后使用“render html:@htmldoc”将文档发送到视图 在视图中,我在一个div中有一个标记ID“lessue”。使用包含HTML文档的AJAX调用的响应,我将文档放入“lessue”标记中。但是HTML被呈现为带有“lesson”标记的TEXTNODE,而我需要它被呈现为HTML 以下是我在new.html.erb中的视图

我需要一些帮助来回复AJAX调用。以下是我想做的:

  • 对我的Rails应用程序进行AJAX调用以获取HTML文档
  • 在Rails控制器内部,从磁盘读取HTML文档。然后使用“render html:@htmldoc”将文档发送到视图
  • 在视图中,我在一个div中有一个标记ID“lessue”。使用包含HTML文档的AJAX调用的响应,我将文档放入“lessue”标记中。但是HTML被呈现为带有“lesson”标记的TEXTNODE,而我需要它被呈现为HTML
  • 以下是我在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>
    
        $(document).ready(function(){
          $("#btn_next").click(function(){
          $.ajax({
            type:'POST',
            url:'/study',
            data: { id: "demo.html" },
            success:function(result){
              $("#lesson").html(result);
            }
          });
        });
    
    }))

    这是我的路线。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>
    

    head1head2您需要告诉rails使用
    .html\u safe
    方法将其呈现为html内容。试着这样做:

    render html: @htmldoc.html_safe
    

    我使用的是rails 5:更新了答案。非常感谢Shaunak!它起作用了!在过去的两天里,我一直在拔头发!非常感谢!不客气。请接受答案,以便其他人在遇到相同问题时使用。