반응형
레코드를 파기 할 때 Carrierwave가 파일을 삭제하도록하는 방법은 무엇입니까?
파일을 업로드하기 위해 carrierwave gem을 사용하고 있습니다.
사용자가 이미지를 부적절한 것으로 표시하고 관리자가 이미지를 제거 할 수있는 시스템을 구축했습니다. 내가 알 수 있듯이 이미지에서 destroy를 호출하면 테이블에서 경로 이름 만 제거됩니다.
Carrierwave가 실제로 파일 자체를 제거하도록하는 방법이 있습니까? 아니면 레일이 이미지 경로를 삭제할 때 파일을 자동으로 제거해야합니까?
CarrierWave가 이에 대해 무엇을 제공하는지 확실하지 않지만 FileUtils
ActiveRecord 콜백과 함께 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
반응형
'code' 카테고리의 다른 글
SQLite 테이블이있는 경우 자르시겠습니까? (0) | 2021.01.05 |
---|---|
표시 할 텍스트를 기준으로 UILabel 자동 크기 조정 (0) | 2021.01.05 |
TextView의 텍스트 색상을 얻는 방법은 무엇입니까? (0) | 2021.01.05 |
PHP 개체 리터럴 (0) | 2021.01.05 |
패키지가 설치되지 않은 경우 Ansible이 셸 스크립트를 실행하도록하는 방법 (0) | 2021.01.05 |