2011-01-25 3 views
26

J'ai un modèle post et un modèle podcast. Les deux modèles ont un attribut intitulé: image. J'utilise un uploader Carrierwave (nommé ImageUploader) pour gérer les deux modèles. J'ai deux questions avant d'entrer en production.Carrierwave; plusieurs téléchargeurs ou juste un?

question Dumb:

est-il autorisé à utiliser la même Uploader pour deux modèles différents quand ils ont tous deux le même nom d'attribut pour leurs fichiers de pièces jointes? désolé s'il semble évident

question principale:

Je veux créer trois versions de chaque image de blog (pouce, grand, sépia) et seulement 1 version de chaque image podcast (pouce). Dois-je utiliser deux téléchargeurs maintenant ou puis-je utiliser un espace de noms avec celui que j'utilise déjà?

Encore une fois cela semble probablement évident. J'aurais probablement pu écrire le deuxième uploader au moment où il m'a pris pour poser ces questions

+0

il est une très très bonne question – BKSpurgeon

Répondre

39

Vous pouvez utiliser le même uploader sur différents modèles même s'ils ont des noms d'attribut différents. par exemple.

class Post 
    mount_uploader :image, ImageUploader 
end 

class Podcast 
    mount_uploader :photo, ImageUploader 
end 

Que vous souhaitiez ou non que ce soit différent. Dans votre cas, je créerais des uploaders différents pour chaque modèle, car ils ont des exigences différentes. Vous pouvez toujours utiliser les sous-classes si vous voulez garder votre code sec:

class ImageUploader < Carrierwave::Uploader::Base; end # thumbnail 
class PostImageUploader < ImageUploader; end # thumbnail (from superclass), large & sepia 
class PodcastImageUploader < ImageUploader; end # thumbnail (from superclass) 
+1

grâce, qui le rend beaucoup plus clair pour moi – stephenmurdoch

Questions connexes