4

Je travaille sur la mise à niveau d'une application vers Rails 3, et attach_fu est cassé donc je passe à carrierwave. Y a-t-il un processus systématique que je puisse suivre pour passer de attachment_fu à carrierwave? Ou un tutoriel pour cela? En ce moment, je suis plus intéressé à tout mettre fin à la base de données. J'utilise l'option de stockage de système de fichiers pour attachment_fu et carrierwave.Manière systématique de passer de attachment_fu à carrierwave?

J'ai trouvé un module, UploaderFu de http://ruby.simapse.com/2011/03/migrate-attachmentfu-to-carrierwave.html qui indique à carrierwave d'utiliser les mêmes répertoires et noms de fichiers que attach_fu. Mais ce n'est pas toute la réponse, juste une partie.

Par exemple, dans la db, j'ai un modèle UserImage, avec :filename, :content_type, :size, :width, :height et :user_id attributs. J'ai ajouté une colonne :user_avatar, et ce qui suit à mon modèle

attr_accessible :user_avatar 
mount_uploader :user_avatar, UserAvatarUploader 

Ce qui est exactement stocké dans :user_avatar. Est-ce juste le nom de fichier? ou autre chose? Ai-je juste besoin d'écrire une migration pour déplacer les données dans :filename (stocké comme "hello_world.png") à :user_avatar? Si c'est le cas, je devrais utiliser l'original :filename au lieu de créer une colonne :user_avatar, non?

+0

Y a-t-il une description de votre processus pour ce faire? Je suis en train de mettre à jour une ancienne application existante et je cherchais une description du processus. – JohnMetta

Répondre

1

La colonne sur laquelle vous installez le téléchargeur est supposée stocker un "identifiant" pour le fichier téléchargé. Par défaut, il s'agit simplement du nom de fichier, mais vous pouvez le remplacer pour qu'il soit presque différent de l'ID de l'enregistrement (car vous ne pouvez pas savoir ce que c'est avant d'avoir sauvegardé).

Pour remplacer: dans votre classe Uploader, ajoutez cette définition:

def identifier 
     # This is what gets put in the database column! 
     model.created_on 
end 

Dans cet exemple, je l'ai utilisé l'attribut created_on du modèle. Si vous voulez créer votre propre mécanisme de stockage, vous devez être en mesure d'identifier de manière unique les fichiers par cet identifiant, alors faites attention à ce que vous choisissez.

Je suggérerais de renommer la colonne pour qu'elle décrit le fichier qui est en train d'être téléchargé (comme dans l'exemple de l'onde porteuse). Ensuite, vous pouvez toujours changer l'identifiant du nom de fichier à quelque chose d'autre plus tard.

Questions connexes