2014-12-26 2 views
1

변형의 경우 이미지 파일의 이름을 [variant-name]-[underscored-option-type].jpg으로 변경해야합니다. 나는 여기까지왔다.이름 바꾸기 Spree :: 저장 후 이미지

업데이트 코드

Spree::Image.class_eval do 

after_save :change_file_name 

private 

    def change_file_name 
    if self.viewable.kind_of? Spree::Variant 
     product_name = self.viewable.product.name.downcase.gsub(" ","_") 
     underscored_option_types = get_underscored_option_types 
     random_number = rand(10000...1000000) 
     extension = File.extname(self.attachment_file_name).downcase 
     attachment_file_name = product_name+"-"+underscored_option_types+"-"+"#{random_number}"+"#{extension}" 
     self.update_column(:attachment_file_name, attachment_file_name) 
    end 
    end 

end 

이 코드는 attachment_file_name 열 이름을 변경합니다. 이미지의 이름을 바꾸는 방법? self.save조차도 재귀 루프를 벗어나서는 작동하지 않습니다.

답변

1

서로 다른 스타일 (버전)의 이미지가 저장되어 있으므로 각각의 위치에서 파일의 이름을 변경해야했습니다. 이미지의 각 버전을 각각의 위치에서 이름을 바꿔야합니다. 다음 코드가 도움이되기를 바랍니다 .cheers :

Spree::Image.class_eval do 

after_save :change_file_name 

private 

    def change_file_name 
    @skip_change_file_name ||= false 
    return if @skip_change_file_name 
    if self.viewable.kind_of? Spree::Variant 
     product_name = self.viewable.product.name.downcase.gsub(" ","_") 
     underscored_option_types = get_underscored_option_types 
     random_number = rand(10000...1000000) 
     extension = File.extname(self.attachment_file_name).downcase 
     new_file_name = product_name+"-"+underscored_option_types+"-"+"#{random_number}"+"#{extension}" 
     (self.attachment.styles.keys+[:original]).each do |style| 
     FileUtils.move(self.attachment.path(style), File.join(File.dirname(self.attachment.path(style)), new_file_name)) 
     end 
    self.attachment_file_name = new_file_name 
    @skip_change_file_name = true 
    self.save! 
    end 
    end 

end