То, как я переименовываю файл после того, как, было загружено и сохранено? Моя проблема состоит в том, что я должен проанализировать информацию о файлах автоматически для предложения имени файла, файл должен быть сохранен как с моим приложением, но я не могу получить доступ к информации, запрошенной для генерации имени файла, пока запись для модели не была сохранена.
Если, например, ваша модель имеет изображение атрибута:
has_attached_file :image, :styles => { ...... }
По умолчанию файлы papepclip хранятся в / system /: attachment /: id /: style /: filename.
Итак, Вы можете добиться этого, переименовав каждый стиль, а затем изменив столбец image_file_name в базе данных.
(record.image.styles.keys+[:original]).each do |style|
path = record.image.path(style)
FileUtils.move(path, File.join(File.dirname(path), new_file_name))
end
record.image_file_name = new_file_name
record.save
Проверяли ли вы интерполяции скрепок?
Если это что-то, что вы можете выяснить в контроллере (до его сохранения), вы можете использовать комбинацию контроллера, модели и интерполяции для решения вашей проблемы.
У меня есть пример, где я хочу назвать файл на основе его MD5-хэша.
В моем контроллере у меня есть:
params[:upload][:md5] = Digest::MD5.file(file.path).hexdigest
Затем у меня есть config/initializers/paperclip.rb
с:
Paperclip.interpolates :md5 do|attachment,style|
attachment.instance.md5
end
Наконец, в моей модели у меня есть:
validates_attachment_presence :upload
has_attached_file :upload,
:path => ':rails_root/public/files/:md5.:extension',
:url => '/files/:md5.:extension'