code

레코드를 파기 할 때 Carrierwave가 파일을 삭제하도록하는 방법은 무엇입니까?

codestyles 2021. 1. 5. 08:07
반응형

레코드를 파기 할 때 Carrierwave가 파일을 삭제하도록하는 방법은 무엇입니까?


파일을 업로드하기 위해 carrierwave gem을 사용하고 있습니다.

사용자가 이미지를 부적절한 것으로 표시하고 관리자가 이미지를 제거 할 수있는 시스템을 구축했습니다. 내가 알 수 있듯이 이미지에서 destroy를 호출하면 테이블에서 경로 이름 만 제거됩니다.

Carrierwave가 실제로 파일 자체를 제거하도록하는 방법이 있습니까? 아니면 레일이 이미지 경로를 삭제할 때 파일을 자동으로 제거해야합니까?


CarrierWave가 이에 대해 무엇을 제공하는지 확실하지 않지만 FileUtilsActiveRecord 콜백과 함께 Ruby 표준 라이브러리에서 사용할 수 있습니다 .

예를 들어

require 'FileUtils'
before_destroy :remove_hard_image

def remove_hard_image
  FileUtils.rm(path_to_image)
end

참고 :이 코드는 메모리에서 가져온 것입니다.


@mu_is_too_short가 말했듯이 File # delete를 사용할 수 있습니다 .

다음은 Rails 앱에서 약간의 조정으로 도우미로 사용할 수있는 코드 스 니펫입니다.

def remove_file(file)
  File.delete(file)
end

또는 파일에 저장된 파일 이름이있는 경우

def remove_file(file)
  File.delete("./path/to/#{file}")
end

파일을 삭제하고 싶지만 전체 파일 이름을 지정하고 싶지 않은 경우 아래를 사용할 수 있습니다.

또한 특정 확장자를 가진 디렉토리에서 많은 파일 또는 모든 파일을 삭제하는 데 사용할 수 있습니다.

file = Rails.root.join("tmp", "foo*") 

또는

file = Rails.root.join("tmp", ".pdf")  

files = Dir.glob(file) #will build an array of the full filepath & filename(s)
files.each do |f|
  File.delete(f)
end

참조 URL : https://stackoverflow.com/questions/6553392/how-to-make-carrierwave-delete-the-file-when-destroying-a-record

반응형