【问题标题】:How to get a list of file names contained in a directory programmatically by using a .js.erb file?如何使用 .js.erb 文件以编程方式获取目录中包含的文件名列表?
【发布时间】:2012-09-21 16:34:38
【问题描述】:

我们使用的是 Rails 3.0,我有一个 js.erb 文件,其中包含我们的徽标图像的硬编码路径,但这意味着一旦部署应用程序,我们就无法轻松地向应用程序添加更多徽标。理想情况下,我们希望找到目录中每张图片的名称,以便用户可以在文件夹中添加一些图片来添加更多徽标。

我尝试了这段代码http://pragprog.com/wikis/wiki/InstantGratification-2/version/21,它归结为使用 ruby​​ 将列表发送到 html.erb。但是,由于这是一个 js.erb 并且位于我们的 app/assets/javascripts 文件夹中,我不知道如何将 ruby​​ 变量从控制器获取到 js.erb。

我还简单地尝试在 js.erb 中导入 System.IO 以访问一些文件 API。没用,而且我不太习惯使用 erb 文件。

【问题讨论】:

    标签: javascript ruby-on-rails ruby ruby-on-rails-3 erb


    【解决方案1】:

    你是对的,js.erb 文件不会像普通的 html.erb 操作视图那样直接访问控制器的方法。您可以直接在 js.erb 中嵌入文件列表逻辑,因为您可以引用 Ruby 核心库,例如这个 sn -p 会将 app/assets/images 目录中的文件名输出为 JavaScript 数组:

    var files = [
    <% Dir.entries("#{Rails.root}/app/assets/images").each do |file_name| %>
      '<%= file_name %>',
    <% end %>
    ];
    

    或者你可以在一个辅助类中实现一个辅助方法,例如

    module ApplicationHelper
      def image_files
        Dir.entries("#{Rails.root}/app/assets/images")
      end
    end
    

    然后你必须将它包含在你的 js.erb 中,如下所示:

    <% environment.context_class.instance_eval { include ApplicationHelper } %>
    var files = [
    <% image_files.each do |file_name| %>
      '<%= file_name %>',
    <% end %>
    ];
    

    【讨论】:

    • 哇,谢谢。我正要创建一个辅助函数来使用 gsub 编辑文件。您节省了许多痛苦的时间。
    猜你喜欢
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 2012-08-19
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    相关资源
    最近更新 更多