0

我们使用的是 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 文件。

4

1 回答 1

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 %>
];
于 2012-09-21T19:18:32.527 回答