Rails:直接从控制器呈现HTML。
我需要一些帮助来回复AJAX调用。以下是我想做的: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中的视图
<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!它起作用了!在过去的两天里,我一直在拔头发!非常感谢!不客气。请接受答案,以便其他人在遇到相同问题时使用。