當圖像使用carrierwave更新,我把它設置爲使用模型身份證和原文件名如何更新文件(在軌)
def filename
"#{model.id}-#{original_filename}" if original_filename.present?
end
其唯一的這樣的時候保持相同的文件名中carrierwave因爲它是我在建立載波時發現的默認方式。最近我意識到,如果您更新圖像,圖像的鏈接已損壞,因爲文件名已更新爲使用較新的文件名。因此,如果頁面鏈接到舊圖像,則不會使用較新的圖像進行更新,反而會變成破碎的圖像鏈接。
我希望它保留舊的文件名時,圖像被更新,但無法找到如何在文檔中,並從編輯
周圍的Googling
我diddnt增添了不少這樣做這個'用例'是因爲我並不認爲這個問題很複雜。
基本上在網站上有items
有images
分配給他們。我確實看到了關於不僅僅使用model.id
的評論,並且@struthersneil清除了爲什麼該評論在那裏。考慮到images
項目的記錄是在創建項目時創建的,因此在添加圖像時(因爲它只是更新已存在的記錄),它們永遠不會是新的。正因爲如此,我會說我最好的選擇是使用model.id
作爲文件名。
我的其他選擇是保留舊圖像,以便鏈接不被破壞。使用它的主要問題是用戶在網站上創建帖子並鏈接到帖子中的這些圖像(帖子定期更新,所以我不能在帖子和帖子中的圖像上緩存一次)。圖像將根據與其關聯的項目的新信息進行更新。一旦發生這種情況,文章中鏈接的圖像將顯示過時的信息,並且每次都必須手動更新到新圖像。因此,圖像鏈接與正在更新的圖像保持一致是這種情況下的最佳選擇。特定情況
你看到這個答案:http://stackoverflow.com/a/23622057/664675?聽起來完全像你的同一個問題。 – rii
@rii這是一個單獨的問題,人從沒有'如果original_filename.present?' – Rob
我在過去幾年做了很多Carrierwave /霧的東西,所以我會盡力爲你回答這個問題,但您是否考慮過保留舊文件,以便舊鏈接繼續運行,然後在達到特定年齡後清理它們?基本上,這些「舊鏈接」在人們瀏覽器的緩存頁面上?如果沒有,他們是否在某處硬編碼(爲什麼不每次都從模型中獲取最新的文件名?) (我不想成爲那個用'呃,你做錯了'來回答的人,但更多信息可能有助於從另一個角度解決這個問題) – struthersneil