9

Paperclip を使用してユーザーが添付できるようにしてから、メールを送信してファイルをメールに添付したいと考えています。次のように、ファイルを読み込んで添付ファイルとして追加しようとしています。

# models/touchpoint_mailer.rb
class TouchpointMailer < ActionMailer::Base
  def notification_email(touchpoint)
    recipients "me@myemail.com"
    from "Touchpoint Customer Portal <portal@touchpointclients.com>"
    content_type "multipart/alternative"
    subject "New Touchpoint Request"
    sent_on Time.now
    body :touchpoint => touchpoint

    # Add any attachments the user has included
    touchpoint.assets.each do |asset|
      attachment :content_type => asset.file_content_type,
                 :body => File.read(asset.url)
    end
  end
end

これにより、次のエラーが発生No such file or directory - /system/files/7/original/image.png?1254497688し、スタック トレースが への呼び出しであることが示されFile.readます。ページにアクセスしてshow.html.erb、 のような画像へのリンクをクリックするとhttp://localhost:3000/system/files/7/original/image.png?1254497688、画像が正常に表示されます。

この問題を解決するにはどうすればよいですか?

4

4 に答える 4

22

通常root_url、これを提供する必要があります。

File.read は、URL ではなく、ファイル パスを想定しています。画像を生成している場合は、画像生成コードを呼び出して、生成された画像のバイトを返す必要があります。File.read(…)

于 2009-10-02T15:57:39.863 に答える
4

asset.urlファイルへのURLを返します。これは通常/system/classname/xx/xx/style/filename.extです。これをに入れますimage_tag

あなたが欲しいasset.path。ファイルへのフルパスを返します。これは通常、次のようになります。/home/username/railsapp/public/system/classname/xx/xx/style/filename.ext

HTH。

于 2010-02-08T15:29:51.340 に答える
3
request.env["HTTP_HOST"]

この1行のコードがWeb上で非常にわかりにくい理由はわかりません。それは正面と中央にあるべきであるように思われます。

于 2013-02-09T22:04:27.580 に答える
1

ZiggyTheHamster が言っているように: asset.url は、Web ページで使用される生成された URL です (これが、コメントで指摘されているように、UNIX スタイルのディレクトリ スラッシュを取得している理由です)。

asset.path は、ファイルへの OS 認識パスを提供する必要がありますが、それはペーパークリップでは必要ありません。 Paperclip::Attachment は既に IOStream です。

次のようにするだけです:body => asset

touchpoint.assets.each do |asset|
  attachment :content_type => asset.file_content_type,
             :body => asset
end
于 2011-03-13T10:37:39.083 に答える