2017-04-03 13 views
0

私は、私のレールアプリでAWSでPaperclipを使用しています。私は画像を保持しているモデルがあります:破損時にS3から画像を削除しないペーパークリップ

class PaperclipFile < ActiveRecord::Base 
    before_validation :parse_image 

    belongs_to :attachment 

    attr_accessor :base64_attachment 

    has_attached_file :image, preserve_files: false 
    validates_attachment :image, presence: true 
    do_not_validate_attachment_file_type :image 

    private 
    def parse_image 
     return unless base64_attachment 
     image = Paperclip.io_adapters.for(base64_attachment) 
     image.original_filename = "img_#{SecureRandom.urlsafe_base64}.jpg" 
    end 
end 

を基本的に私はBASE64で画像を渡すことができ、それが処理してS3に正しく、それを格納します。私はそのレコードをDBからなくなっていますが、ファイルがバケツから破壊されない後

p = PaperclipFile.first 
p.destroy 

を.destroyないときの問題があります。私は何の誤りもないので、それはまったく試みているようには見えません。

出力は次のようになります。

# Attachments 
gem 'paperclip' 
gem 'aws-sdk', '~> 2.3' 

ありがとう:私はルビー2.4、Railsの5.0.2を使用して、彼らはこのように見える宝石用として記録するために

2.4.0 :005 > PaperclipFile.first.destroy 
    PaperclipFile Load (0.8ms) SELECT "paperclip_files".* FROM "paperclip_files" ORDER BY "paperclip_files"."id" ASC LIMIT $1 [["LIMIT", 1]] 
    (0.2ms) BEGIN 
    SQL (0.7ms) DELETE FROM "paperclip_files" WHERE "paperclip_files"."id" = $1 [["id", 2]] 
    (4.1ms) COMMIT 
=> #<PaperclipFile id: 2, attachment_id: 2, created_at: "2017-04-03 04:02:11", updated_at: "2017-04-03 04:02:11", image_file_name: nil, image_content_type: nil, image_file_size: nil, image_updated_at: nil> 
2.4.0 :006 > 

答えて

0

あなたが書いたコードに間違いはありません。

あなたにもS3から画像を削除したい場合は、単にfalseに設定し、次のchanges-

p = PaperclipFile.first 
p.destroy # Removes the attachment from DB 
p.clear # Deletes the attachment from S3 
p.save # To save the model. 
+0

クリアはpの関数ではありません。多分あなたはp.image.clear/p.image.destroyを意味しましたか?私も幸運のない人を試してみました – mrk

+0

p.image.destroy/p.image.clearを実行した後にオブジェクトを保存しようとしました –

+0

あなたの提案に感謝しますが、これまでのところ喜んでいません – mrk

0

デフォルトpreserve_filesを作ります。次のようにオプションを削除してみてください。

has_attached_file :image 
+0

ありがとう。残念ながら私は何もせずにpreserve_filesを試してみました:同じ効果を持つfalse – mrk

+0

もう一度試してみましょう。 '' 'p.image = nil p.save p.destroy''' – scs

+0

私はそれを試みましたが、それは助けになりませんでした。パラノイアを使用することと関連していることがわかります。パラノイアをどこからでも取り除いて動作させています。私は正しく接続する必要がありますが、少なくとも私は.destroyがイメージを今削除することを知っています。ありがとう! – mrk

関連する問題