【问题标题】:understanding where and when rails code runs( js.erb)了解 Rails 代码在何时何地运行(js.erb)
【发布时间】:2017-12-01 20:36:30
【问题描述】:

我需要解释一下 javascript 文件中的 ruby​​ 代码是如何在 rails 中执行的。 我需要知道为什么下面的代码会运行

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

【问题讨论】:

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


    【解决方案1】:

    JavaScript 在浏览器中执行。 js.erb 文件是将在浏览器中发送和执行的代码的模板

    在您的第一个示例中,ERB 模板将导致:

    var path = '/path/to/root/public/time_table/time_table.json';
    

    此 JavaScript 将由浏览器发送并运行。

    在第二个示例中,您不会在输出中插入任何文本(您使用 &lt;% 而不是 &lt;%=)。 &lt;%%&gt; 之间的代码是 Ruby。它打开文件进行读取并分配给file它不会读取文件或在输出中插入任何内容

    一般来说,ERB 用于生成将发送到浏览器的内容。 html.erb 用于 HTML 代码。 js.erb 用于 JavaScript 代码。模板在服务器上展开,结果输出被发送到浏览器。

    基于 cmets 添加。要显示文件的内容,您需要阅读它。 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'
    

    【讨论】:

    • 感谢您的重播@Greg Navis,我不明白您对我的第二个示例的解释。如果我真的要读取文件,我该怎么办??
    • @lilfancy,你想对该文件的内容做什么?分配给 JavaScript 变量?
    • 我的荣幸,@lilfancy。
    猜你喜欢
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 2016-11-18
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多