2012-09-07 35 views
5

我需要能夠將文件附加到郵件(使用郵件程序)以獲取最近上傳的未鏈接到任何模型的文件。Carrierwave Temporary File Without Model

在這種無二上傳表單代碼:

<%= form_for(:mail, :url => {:action => 'send_mail'}, :html => {:multipart => true}) do |f| %> 
<table summary="send_table"> 
    <tr> 
    <th>Attachment</th> 
    <td><%= f.file_field(:attachment) %><a id="attachment"></a></td> 
    </tr> 
</table> 

<%= submit_tag "Send!" %> 

現在,我期待到在send_mail動作做的是一樣的東西:

MyMailer.send_mail(params[:mail][:attachment]).deliver 

使用參數[: mail] [:attachment]是通過表單上傳的臨時文件的路徑。如何做到這一點?

這也意味着另一個問題:一旦發送郵件,我應該從temp中手動刪除文件嗎?如果是,如何?

+3

終於明白了:'unless(params [:mail] [:attachment])。無? 載= AttachmentUploader.new uploader.cache(PARAMS [:郵件] [:附件])! @file_name = uploader.filename @file_data = uploader.file.read() end'然後'MyMailer.send_mail( @ file_name,@ file_data)' – muichkine

+0

如果您是以自己的答案回顧解決方案的遊戲,我會刪除我的答案。 (請參閱http://meta.stackexchange.com/questions/90263/unanswered-question-answered-in-comments,瞭解爲什麼這會有所幫助。)謝謝! – DreadPirateShawn

回答

5

複製從意見的答案,以從 「未答覆」 過濾器中刪除了這個問題:

最後釘它: 

unless (params[:mail][:attachment]).nil? 
    uploader = AttachmentUploader.new 
    uploader.cache!(params[:mail][:attachment]) 
    @file_name = uploader.filename 
    @file_data = uploader.file.read() 
end 

然後

MyMailer.send_mail(@file_name,@file_data) 

〜回答每user1563325

+0

這對我有用!你知道我將如何使用相同的方法多個文件@DreadPirateShawn?提前致謝。 – Les

0

我想補充說,噸他在這裏描述的情景,也許你不需要CarrierWave這樣的臨時上傳情況。上傳使用file_field時,Rails的把它存進一個Tempfile,其路徑就可以像這樣訪問:

params[:mail][:attachment].path 

這些文件被自動刪除,所以你不應該需要擔心他們,因爲Rails docs解釋:

上傳的文件是臨時文件,其壽命是一個請求。當對象完成時,Ruby會取消鏈接該文件,因此不需要使用單獨的維護任務來清除它們。