2015-10-15 42 views
1

我試圖使用File.exist?有動態背景。當我試圖指向File.exist?到一個特定的文件,它似乎沒有找到它。`File.exist?`不會找到存在的文件

如果刪除與我知道存在一個路徑替換city_code,它仍然不會找到它。我必須想念一些小事。

我想更清楚一點:如果我刪除插值/變量並將其替換爲我知道的路徑,例如「../assets/coastbanner.jpg」,它仍然不起作用。事實上,沒有一條有效的道路似乎可以讓它產生真實的反應。

+0

歡迎來到本網站。儘管你能夠得到你的答案,但這個問題來自於關於語言使用的更原則性的錯誤,而不是'File.exist?'接口的問題。嘗試始終驗證核心假設,並開發調試技術。祝你好運! –

+0

謝謝。你是對的,我應該更清楚我嘗​​試的嘗試或修改。事實上,我已經嘗試了沒有解決的每個答案。如果我提供了我所嘗試的,我可以節省時間。我很欣賞這些意見。 – RossRobertMcKee

+0

檢查您是否在您認爲正在運行的目錄中運行此代碼。您可以使用Dir.pwd。 – maro

回答

1

有一些問題與您的代碼:

  • 路線插值只能用雙引號
  • 沒有必要爲一個字符串插值當變量是一個字符串已經
  • 病情屬於同一行比if

此外,運行服務器的文件夾可能與當前提供的網頁文件夾不同。也就是說,對於File.exist?測試,對圖像鏈接和路徑使用絕對路徑(包括Rails.root)可能是有意義的。

我不知道你的應用程序的文件夾結構,但類似下面應該工作:

image_path = "/assets/#{city_code}.jpg" 

if File.exist?(Rails.root.join('app', image_path)) 
    @image = image_path 
else 
    @image = '/assets/coastbanner.jpg' 
end 

提示:測試與coastbanner.jpg以獲取圖像apth正確的,然後用File.exist?,以獲取路徑在應用程序中。

+0

嘿,單引號在那裏,因爲我已經試過雙引號。我在絕望中所做的一切。去除插值也不會使它工作。奇怪的是'../assets/coastbanner.jpg'會完美加載,但如果我將它插入到File.exist中?我會得到錯誤的。換句話說,當我在我的File.exist中放置一條完美的路徑時,它仍然不會迴應爲真。 – RossRobertMcKee

+0

@RossRobertMcKee:我更新了我的答案。 – spickermann

+0

繁榮!它是。我不得不閱讀了Rails.root,因爲它對我來說是新的,但它的確有竅門。 – RossRobertMcKee

0

不要以爲你可以在帶有單引號的字符串中有#{}。嘗試雙引號。

+2

或者,在這種情況下,完全刪除引號。 –

+0

haha​​ ofcourse! :D – sourcx

1

您需要使用雙引號才能使字符串插值工作。

File.exist?("#{image_path}") 

在這種情況下,您實際上可以使用該變量,因爲它已經是您想要的字符串。

File.exist?(image_path) 

如果你想使用#{}功能,使用它是創造image_path時的好地方。

image_path = "../assets/#{city_code}.jpg" 
+0

在單引號之前,我實際上已經有了雙引號,試圖讓它起作用。單引號和雙引號都不會起作用。也沒有去除插值和簡單地離開變量... – RossRobertMcKee

+0

你最終如何使用'image_path'?你把它放在圖像標籤中嗎?或者使用'File.read'?或者是其他東西? – dontangg

+0

我是編程新手,對我一無所知。但是,當執行搜索時,我想顯示搜索到的城市的圖像,但如果沒有該城市的圖像,那麼我想顯示默認照片。因此,如果image_path中的city_code找到匹配的文件,那麼@image將在我的視圖中用於顯示背景。 '' – RossRobertMcKee

1
if 
    File.exist?(image_path) 
+0

不幸的是,這並沒有得到它的工作。我編輯了這個問題,並想指出,我放入File.exist的任何有效路徑?將不會產生真實的迴應。如果我用'../assets/coastbanner.jpg'替換image_path,它仍然會作爲false響應,即使該文件存在。 – RossRobertMcKee

0

我假設你正在使用與Rails應用程序中,如果是這樣,最可能的原因是:

當Rails的創建assets它創建了一個摘要。正因爲如此,您的圖片名稱中可能會有一個摘要字符串。因此,我建議使用image_pathasset_path

例:File.exist?(image_path("#{city_code}.jpg"))

不過話說回來,正確的是如果你要設置的自定義圖像來處理這些類型的案件將有一個標誌數據庫或不。因爲它比訪問文件系統要快得多。