2016-08-08 3 views
0

Мне нужна помощь в ответе от звонка AJAX. Вот что я хочу сделать:Rails: визуализировать HTML-код непосредственно с контроллера.

  1. Сделать вызов AJAX для моего приложения Rails, чтобы получить документ HTML.
  2. Внутри контроллера Rails читайте документ HTML с диска. Затем отправьте документ в представление, используя «render html: @htmldoc»
  3. Внутри представления у меня есть идентификатор тега «Урок» в div. Используя ответ от вызова AJAX, который имеет документ HTML, я помещал документ в тег «Lesson». Но HTML отображается как TEXTNODE с тегом «Lesson», в то время как мне нужно, чтобы он отображался как 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> 

Вот мой AJAX вызов в new.html.erb:

$(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 таблицы, а не строка текста.

Большое спасибо за помощь всем!

+0

Это рельсы 5 Я использую: – David

+0

обновил ответ. – Shaunak

ответ

0

Вам необходимо указать рельсы, чтобы отобразить его как содержимое html, используя метод .html_safe. Попробуйте сделать это так:

render html: @htmldoc.html_safe 
+0

Большое спасибо Shaunak! Оно работает! Я тянул свои волосы в течение последних двух дней! Очень признателен! – David

+0

Добро пожаловать. Примите ответ, чтобы другие могли использовать его, когда сталкивались с тем же вопросом. – Shaunak

Смежные вопросы