我们正在使用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文件。
答案 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 %>
];