2012-10-03 55 views
6

Paperclip提供了一個.url方法,用於獲取包含在視圖中的附件的URL。在Ruby中打開回形針附件的標準/正確方法是什麼?

我需要在Ruby中實際打開一個附件作爲文件。

大約六個月前,Paperclip的最新版本允許我們在附件對象上調用to_file。雖然它沒有記錄,但它一直工作。但在某個時候它停止了工作。

我希望能夠在驗證器中打開文件本身(在這種情況下,它尚未保存到最終位置),或者在保存ActiveModel對象後從其他方法打開文件(在這種情況下該文件已被移至最終位置,可能位於Amazon S3上)。

好像有三種選擇:

file = File.new(object.attachment.path) 

...只與本地文件,而不是那些在S3工作。或者:

file = object.attachment.queued_for_write[:original] 

...哪些只在第一次保存(我認爲)之前工作?

似乎應該有一個簡單的方法來打開該文件(在類似Amazon S3的情況下,可能需要將其複製到臨時位置),我猜測答案有些事情要做與io_adapters,但我已經通讀代碼(和不少StackOverflow的問題),我仍然難住。

是否有一種標準的方式來打開一個回形針附件作爲一個文件,在所有情況下工作?

回答

4

這將讓你的文件(假設yourmodel附加一個file

require 'open-uri' 

file = open(yourmodel.file.url) 
+1

這是否需要該文件已保存?當文件是臨時的正確方法應該工作。 – DDDD

+2

這不當文件不在S3上時工作 - 例如,dev與prod。 – user1032752

相關問題