4

どのモデルにもリンクされていない最近アップロードされたファイルのファイルを(メーラーを使用して)メールに添付できる必要があります。

アップロードフォームに使用されるコードでは、次のようになります。

<%= 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 

params [:mail] [:attachment]は、フォームとともにアップロードされた一時ファイルへのパスです。どうすればそれができますか?

これは、別の質問も意味します。メールが送信されたら、一時ファイルからファイルを手動で削除する必要がありますか?はいの場合、どのように?

4

2 に答える 2

8

この質問を「未回答」フィルターから削除するために、コメントから回答をコピーします。

最後にそれを釘付けにしました: 

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)

〜ユーザーごとの回答1563325

于 2013-10-09T06:11:55.030 に答える
0

ここで説明するシナリオでは、このような一時的なアップロードの状況ではCarrierWaveは必要ないかもしれません。を使用してアップロードする場合file_field、RailsはそれをTempfileに保存します。このTempfileのパスには、次のようにアクセスできます。

params[:mail][:attachment].path

Railsのドキュメントで説明されているように、これらのファイルは自動的に削除されるため、心配する必要はありません。

アップロードされたファイルは、ライフスパンが1つのリクエストである一時ファイルです。オブジェクトが完成すると、Rubyはファイルのリンクを解除するため、別のメンテナンスタスクでオブジェクトをクリーンアップする必要はありません。

于 2017-12-31T01:02:59.863 に答える