Систематический способ обновления с attachment_fu до carrierwave?
Я работаю над обновлением приложения до Rails 3, и attachment_fu не работает, поэтому я перехожу к carrierwave. Есть ли систематический процесс, который я могу пройти, чтобы перейти с attachment_fu на carrierwave? Или учебник для этого? Прямо сейчас, я больше заинтересован в том, чтобы все правильно закончить с базой данных. Я использую опцию хранилища файловой системы для attachment_fu и carrierwave.
Я нашел модуль, UploaderFu
от http://ruby.simapse.com/2011/03/migrate-attachmentfu-to-carrierwave.html который сообщает carrierwave использовать те же каталоги и имена файлов, что и attachment_fu. Но это не весь ответ, а только часть.
Например, в БД у меня есть UserImage
модель, с :filename
, :content_type
, :size
, :width
, :height
, а также :user_id
атрибутов. Я добавил :user_avatar
колонка, и следующее к моей модели
attr_accessible :user_avatar
mount_uploader :user_avatar, UserAvatarUploader
Что именно хранится в :user_avatar
, Это просто имя файла? или что-то другое? Мне просто нужно написать миграцию для перемещения данных в :filename
(хранится как "hello_world.png"
) чтобы :user_avatar
? Если это так, я должен просто использовать оригинал :filename
вместо создания :user_avatar
колонка, верно?
1 ответ
Столбец, в который вы монтируете загрузчик, должен хранить "идентификатор" для загруженного файла. По умолчанию это просто имя файла, но вы можете переопределить его, чтобы оно было практически любым, кроме идентификатора записи (потому что вы не можете знать, что это такое, пока не сохраните).
Чтобы переопределить: в своем классе загрузчика добавьте это определение:
def identifier
# This is what gets put in the database column!
model.created_on
end
В этом примере я использовал атрибут made_on из модели. Если вы хотите создать свой собственный механизм хранения, вам нужно иметь возможность уникально идентифицировать файлы по этому идентификатору, поэтому будьте осторожны с тем, что вы выберете.
Я бы предложил переименовать столбец, чтобы он описывал загружаемый файл (как в примере carrierwave). Тогда вы всегда можете изменить идентификатор из имени файла на что-то другое позже.