我需要解释一下如何在rails中执行javascript文件中的ruby代码。 我需要知道为什么下面的代码会运行
var path = '<%= "#{Rails.root}/public/time_table/time_table.json" %>';
和
<% file = File.new("#{Rails.root}/public/time_table/time_table.json",'r') %>
不会。 JavaScript文件在rails中执行的位置和时间。 当应用程序在 filename.js.erb 文件中看到ruby代码语法时,它如何处理它。我真的需要这个解释。
答案 0 :(得分:2)
JavaScript在浏览器中执行。 js.erb
个文件是 templates ,用于在浏览器中发送和执行的代码。
在您的第一个示例中,ERB模板将导致:
var path = '/path/to/root/public/time_table/time_table.json';
此JavaScript将由浏览器发送和运行。
在您的第二个示例中,您不会在输出中插入任何文本(您使用的是<%
而不是<%=
)。 <%
和%>
之间的代码是 Ruby 。它会打开文件进行阅读并分配给file
。 它没有读取文件或以其他方式在输出中插入任何内容。
通常,ERB
用于生成将发送到浏览器的内容。 html.erb
用于HTML代码。 js.erb
适用于JavaScript代码。模板在服务器上展开,结果输出发送到浏览器。
根据评论添加。要显示文件的内容,您需要阅读它。 File.new
只是打开它并允许您操作文件(读,写,截断等)。我建议您使用File.read
阅读文件并将其插入模板中:
<%= raw File.read("#{Rails.root}/public/time_table/time_table.json") %>
您也可以考虑将文件移动到部分文件,例如app/views/time_tables/_time_table.json.erb
并在控制器中使用以下内容进行渲染:
render partial: 'time_tables/time_table.json.erb'