2012-04-23 9 views
14

я использую этот метод для переименования изображения перед сохранением:Скрепка - переименовать файл перед сохранением

def rename_avatar 
    self.avatar.instance_write :file_name, Time.now.to_i.to_s 
    end 

    before_post_process :rename_avatar 

Изображения переименовано текущее время, но не добавил типа файла, вместо 1334487964. jpg сохраняется только 1334487964..

Что мне там недостает? Я подумал : имя_файл содержит только имя файла - без типа файла

ответ

22

Это способ, как исправить мою проблему:

def rename_avatar 
    #avatar_file_name - important is the first word - avatar - depends on your column in DB table 
    extension = File.extname(avatar_file_name).downcase 
    self.avatar.instance_write :file_name, "#{Time.now.to_i.to_s}#{extension}" 
    end 
+0

Это решение работает нормально, за исключением факта, если вы редактируете запись. в моем случае у меня есть 3 вложения, фотография, сертификат1, сертификат2, если я меняю фотографию, мне нужно снова загрузить сертификаты, потому что, когда процедура переходит к обратному вызову «before_post», она записывает новое и существующее имя файла в БД. У вас есть решение для этого? Благодаря! ;) – drmwndr

1

С Paperclip рекомендует использовать interpolates, эта ссылка может помочь вам самому лучшему , https://wyeworks.com/blog/2009/7/13/paperclip-file-rename

+0

@drmwndr, слишком поздно для вечеринки, но это может помочь вам исправить вашу проблему. – Abhas

Смежные вопросы