了解rails代码运行的位置和时间(js.erb)

时间:2017-12-01 01:17:59

标签: ruby-on-rails ruby ruby-on-rails-5 erb

我需要解释一下如何在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代码语法时,它如何处理它。我真的需要这个解释。

1 个答案:

答案 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'
相关问题