2014-09-13 110 views
3

如果資產存在,是否有任何方法可以詢問資產管道?我在很大程度上看到的建議涉及使用File.exist?手動檢查文件路徑。問題是我有幾個包含資產的寶石,所以我必須查看每個資產目錄,對吧?這看起來像是我期望能夠融入資產管道的東西,但我找不到任何參考。Rails Asset Pipeline - 如何確定資產是否存在?

我目前的解決方案是一個醜陋的黑客,所以我希望你有更好的東西。調用asset_path(file)將爲資產返回一個新的URL(/ asset/xyz),如果它不存在(或者它是絕對路徑),則返回相同的路徑。所以我的醜陋的黑客是:

def has_asset?(path) 
    # Asset pipeline only does relative paths 
    if path[0] == '/' 
    return false 
    end 
    asset_path(path) != '/#{path}' 
end 

回答

7

我才發現,我可以使用assets.find_asset

def has_asset?(path) 
    Rails.application.assets.find_asset(path) != nil 
end 
+4

讓Google這裏登陸的緣故 - 小心,這似乎並沒有在生產HTTPS正常工作:// github上。 com/mileszs/wicked_pdf/issues/476 – DannyB 2016-02-10 14:31:06

+0

如果有人正在尋找可用於生產的解決方案,請參閱[本答案](http://stackoverflow.com/a/35319530/413924) – DannyB 2016-02-10 15:41:45

1

目前公認的答案不生產工作。

我用下面的方法在開發和生產環境中工作:

module AssetHelper 
    def asset_exists?(path) 
    if Rails.env.production? 
     Rails.application.assets_manifest.find_sources(path) != nil 
    else 
     Rails.application.assets.find_asset(path) != nil 
    end 
    end 
end 
相關問題