2015-01-12 3 views
0

PROC/람다 정의 옵션 preserve_files :종이 클립 내가 그런 PROC 오브젝트로 종이 클립의 preserve_files 옵션을 정의하려고했다

class Image < ActiveRecord::Base 

    has_attached_file :asset, styles: { 
          thumb: "100x100#" 
         }, 
         preserve_files: Proc.new { |image| Image.where(asset_fingerprint: image.asset_fingerprint).where.not(id: image.id).any? ? true : false } 

end 

을하지만 "true"를 항상 반환 된 것처럼 동작합니다. 올바르게 정의하는 방법이 있습니까?

동일한 지문을 가진 파일은 저장소에 한 번만 저장되지만 다른 저장된 이미지 개체가 사용중인 경우 파일 자체를 삭제할 수 없습니다.

답변

0

preserve_files 옵션은 속한 개체를 삭제할 때 파일을 저장하거나 제거할지 여부를 정의합니다. paperclip documentation에서

:

이 여전히 존재 있도록 파괴됩니다 모델 개체가 나중에 을 복원 할 때 때 전멸되는 some_attachment을 방지 할 수 있습니다.

클립 클립에는 포함되어 있지 않지만 사용자가 설명하는 기능 (여러 개의 개체에 업로드 할 때 이미지를 한 번만 저장하는 기능)은 정말 흥미 롭습니다.

+1

이 기능은 클립 클립 보간에 추가 할 수 있습니다. 예 : 옵션'url : "/system/images/:md5_path.:extension"'md5_path는 파일의 지문에서 경로와 파일 이름을 만드는 보간법입니다. 사실 이미지는 항상 업로드되고 저장되므로 (md5hash와 같은 지문을 계산할 수 있음) 한 번만 저장됩니다. 유사한 문제를 해결하는 일부 참조 : http://jonathanng.com/ruby-on-rails/getting-around-ext3-inode-limitations-using-md5-file-paths-and-paperclip-interpolations/ – Nikos