2013-03-27 96 views
0

我添加回形針風格,以我的Rails模型網址:回形針返回非現有樣式

asset = Asset.last 
asset.media(:thumb) = correct_url 
:上載有適當的拇指風格,這將返回正確的URL

class Asset < ActiveRecord::Base 

    has_attached_file :media, 
       :styles => {:thumb => "100x100>"} 
end 

新資產

但它好像甚至風格,不存在返回網址:

asset = Asset.last 
asset.media(:foobar) = some_url 

我向我的模型添加新的樣式,如「大」,如果這種樣式不存在以前保存的模型實例,我希望它會返回一個錯誤或一個空字符串。

如果樣式不存在的實例,如何讓回形針返回一個空字符串?

asset = Asset.last #doesn't have style foobar 
asset.media(:foobar) = '' #or could return an error 

謝謝。

回答

0

我不知道,如果我明白你到底想要什麼。

如果你想要求一個URL爲JUST WRONG風格(即開發者拼錯它)時,錯誤/空字符串,那麼你可以嘗試下面。

默認情況下,它只是替換has_attached_file中指定的標籤。見interpolate方法。

看起來可以通過選項更改此默認行爲。您需要實施類似Paperclip::Interpolations的類。見self.default_optionshere:interpolator是適合你的。

在另一方面,如果你想獲得空網址失蹤樣式特定的附件(即正確的,但不是文件存在某種原因 - 也許你剛剛增加新的款式),則:

我想這可能會影響性能(即使用文件系統甚至外部服務)。所以,對於通用用法不是一個好主意。

您可能應該考慮在添加新樣式時運行rake任務。回形針已經有rake paperclip:missing_styleson github)來做到這一點。但是這可能是非常長時間的運行任務(例如,我的託管服務器在完成之前殺死了rake進程)。

如果性能不是您的問題,您也可以製作自己的插補器。

+0

感謝。是的,你的第二種情況是我想要的。我添加了一種新的風格。如果我要求該風格的URL路徑,但該風格不存在該特定的附件,爲什麼我會得到一個URL路徑? – user1280971 2013-03-27 17:49:26

+0

因此,正如我的回答中所寫 - 這是回形針的默認實現。您可以像第一種情況一樣使用自己的插補器覆蓋它。 – 2013-03-27 19:23:07

+0

感謝您的解釋,但尼府 – user1280971 2013-04-11 19:40:53

0

如果一個實例的樣式不存在,如何回到 的回形針返回一個空字符串?

在這種簡單的情況下,設置:default_url""應該工作:

class Asset < ActiveRecord::Base 
    has_attached_file :media, :styles => {:thumb => "100x100>"}, :default_url => "" 
end 
+0

我想我只是驚訝,它返回任何東西。如果我添加新的樣式,我不希望以前保存的附件返回任何不符合附件要求的樣式。 – user1280971 2013-03-27 17:13:01

+0

如果我是正確的,:DEFAULT_URL工作,如果連接是在所有缺失(即你沒有分配到模型圖片)。所以,與缺失的樣式無關。 – 2013-03-27 17:48:16

0

我沒想到:DEFAULT_URL將處理那種情況下,我得查。但我已經爲你所做的那樣,當我真正需要知道的樣式是否存在是類似以下內容:

flavor = (Faraday.head(post.photo.url(:output)).status == 200) ? :output : :original 
url = post.photo.url(flavor) 

它下載您採取一擊這麼記住的文件。這也假定您不想用回形針耙任務重新處理所有現有的附件。