2016-06-23 2 views
0

클립 클립을 사용하여 파일을 내 Rails 4 앱에 업로드하고 있습니다.before_save는 레일 4에 클립 클립 업로드를 중단합니까?

내가 액세스 할 수 있도록 업로드 한 다음 처리하여 일부 데이터를 가져 와서 같은 모델에 저장해야합니다.

우선, 나는 after_save을 사용하고 있지만 파일을 처리하고 나머지 데이터를 저장하면 레코드를 MySQL에 저장하고 바로 업데이트하는 것이 리소스 낭비처럼 보입니다.

그런 다음 before_save을 사용하여 파일을 처리하고 모델에 관련 데이터를 저장한다고 생각했습니다. 이렇게하면 하나의 MySQL 저장 만 수행 할 수 있습니다.

나머지 데이터를 얻으려면 먼저 파일을 필요로하기 때문에 레코드를 저장 한 후 클립 클립이 업로드를 완료하면 문제가 발생합니다.

레코드를 저장하거나 새 개체를 만들 때 업로드하면 클립 클립이 업로드를 수행합니까?

답변

1

뭔가를 원한다면 나는 (어쩌면 내가 그것으로 보일 것입니다) 클립이 내부적으로 어떻게 작동하는지 전혀 모르겠어요. 그러나 before_save 메소드에서 작성한 임시 파일 Paperclip에 액세스 할 수 있습니다. 저는 이러한 '솔루션'을 사용하여 앱에서 이미지 크기를 추출합니다.

class Artwork < ApplicationRecord 
    before_save :extract_dimensions 

    has_attached_file :artwork, 
    styles: { 
     lg: '500x700>', 
     md: '200x300>', 
     sm: '200x200>' 
    } 

    do_not_validate_attachment_file_type :artwork 
    process_in_background :artwork 

    validates_uniqueness_of :artwork_file_name, scope: :game_id 

private 

    def extract_dimensions 
    tempfile = artwork.queued_for_write[:original] 

    unless tempfile.nil? 
     geometry = Paperclip::Geometry.from_file(tempfile) 
     self.dimensions = [geometry.width.to_i, geometry.height.to_i].join('x') 
    end 
    end 
end 

1 개 또는 2 개의 쿼리를 수행하는지 여부는 확실하지 않습니다. 모든 공정성에서는 백그라운드에서 완료 되었기 때문에 추가 쿼리를 하나만 수행하더라도 실제로 신경 쓰지 않아도됩니다. 희망이 당신을 돕는다.

관련 문제