Попробуйте использовать before_create
обратный вызов в ActiveRecord. Поскольку paperclip не будет записывать прикрепленный ресурс на диск до тех пор, пока не будет вызван ActiveRecord::Base#save
, похоже, сейчас самое подходящее время для создания вашего пользовательского имени файла.
Для этого просто зарегистрируйте обычный метод для создания пользовательского имени файла. Это изменит имя прикрепленного изображения, которое вы затем найдете в своей файловой системе и в своей базе данных.
Допустим, у вас есть модель, к которой вы хотите прикрепить изображение с произвольным произвольным именем файла.
В вашей модели:
has_attached_file :image
before_create :randomize_image_file_name
Также в вашей модели:
def randomize_image_file_name
extension = File.extname(image_file_name).downcase
self.image.instance_write(:file_name, "#{ActiveSupport::SecureRandom.hex(8)}#{extension}")
end
Вы можете объявить ваш метод где угодно, хотя рекомендуется объявлять методы обратного вызова как защищенные или частные.
Это сохранит вложение с произвольным произвольным именем файла.
Надеюсь, это поможет.