如何使用.js.erb文件以编程方式获取目录中包含的文件名列表?

时间:2012-09-21 16:34:38

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

我们正在使用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文件。

1 个答案:

答案 0 :(得分:1)

你是对的,js.erb文件不能像普通的html.erb动作视图一样直接访问控制器的方法。您可以直接在js.erb中嵌入文件列表逻辑,因为您可以引用Ruby核心库,例如此代码段将输出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 %>
];