2012-09-21 58 views
0

我們使用的是Rails 3.0,我有一個js.erb文件,其中包含我們徽標圖像的硬編碼路徑,但這意味着一旦部署了應用程序,我們就不能輕鬆地將更多徽標添加到應用程序中。理想情況下,我們希望找到目錄中每個圖像的名稱,以便用戶可以在文件夾中添加一些圖像以添加更多徽標。如何通過使用.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

你說得對,js.erb文件不會像正常的html.erb操作視圖一樣直接訪問控制器的方法。您可以直接在您的js.erb中嵌入文件列表邏輯,因爲您可以引用Ruby核心庫,例如這個片段將輸出在app /資產/ 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 %> 
]; 
+0

WOW謝謝。我正要創建一個幫助函數來用gsub編輯文件。你拯救了許多悲慘的時刻。 – Spencer

相關問題