Скрепка gem и пользовательские имена файлов в базе данных Rails 2.3 - PullRequest
0 голосов
/ 09 января 2012

Я пытаюсь создать собственное имя файла для файлов, загруженных через гем paperclip, используя Paperclip.interpoles в инициализаторе. Проблема, с которой я сталкиваюсь, заключается в том, что при загрузке файла обновляется пользовательское имя файла в файловой системе, но имя файла базы данных остается именем исходного файла. Есть ли лучший способ переназначить атрибут базы данных, чтобы справиться с этим?

1 Ответ

3 голосов
/ 01 июля 2012

Попробуйте использовать 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

Вы можете объявить ваш метод где угодно, хотя рекомендуется объявлять методы обратного вызова как защищенные или частные.

Это сохранит вложение с произвольным произвольным именем файла.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...