Question

J'utilise actuellement le génial plugin attachment-fu pour une application Rails, mais en tant que développeur novice, je n'ai jamais rencontré de scénario comme celui dans lequel je me suis retrouvé.

Essentiellement, j'utilise le plugin attachment-fu à deux niveaux.

  1. Est destiné aux avatars des utilisateurs de la classe d'utilisateurs.
  2. Est d'autoriser les pièces jointes (PDF, etc.) dans un système de messagerie.

Ma question est de savoir quelle serait la meilleure pratique d'utilisation dans ces situations pour rester SEC, clair et cohérent.

De toute évidence, cela n'aurait aucun sens de définir et d'exécuter le plugin dans les deux classes, mais il y a quelque chose de profondément étrange pour moi (peut-être sans fondement) à propos de simplement aller de l'avant et de tout configurer dans la classe divine Application.

Y a-t-il quelque chose entre les deux, ou la classe parent est-elle la voie à suivre ?

Merci!

Était-ce utile?

La solution

Je préférerais utiliser une classe parent, avec des sous-classes pour les différentes manières dont vous avez l'intention d'utiliser réellement les pièces jointes dans votre application.Ce n’est peut-être pas la solution la plus SÈCHE disponible, cependant, elle se prête plutôt bien à un modèle logique.

Autres conseils

Quel est le problème DRY lié à la définition deux fois des paramètres attachment_fu ?

À moins que les fichiers ne soient du même type et stockés au même endroit, vous ne répéterez rien dans la configuration.

Bien sûr, vous aurez deux déclarations has_attachment, mais les options seront pour la plupart différentes (une déclaration pour vos avatars et l'autre pour vos pdf, etc.

99,99% du code pour gérer les pièces jointes sera enfoui dans les bibliothèques attachment_fu, votre code de configuration devrait être assez SEC par défaut =)

Est-ce que "l'externalisation" du support des avatars est entièrement destinée à Gravatar une option?Certains plugins Rails afficheront les avatars hébergés par Gravatar.Vous n’aurez peut-être pas besoin de réinventer la roue.

Ce que wfarr décrit serait héritage de table unique, c'est ce que je fais actuellement dans cette situation.J'ai une table pour les actifs qui contient toutes les colonnes attachment_fu nécessaires, plus une colonne supplémentaire appelée type, qui contiendra le nom réel du modèle.J'ai un modèle pour les actifs et des modèles supplémentaires pour les types de téléchargement spécifiques qui héritent des actifs :

actif.rb :

class Asset < ActiveRecord::Base
  ... attachment_fu logic ...
end

avatar.rb :

class Avatar < Asset
  ... avatar specific attachment_fu logic ...
end

pdf.rb :

class PDF < Asset
  ... PDF specific attachment_fu logic ...
end

Tu ne pourrais pas utiliser Associations polymorphes?

Je suis sur le point d'aborder cela dans mon application avec attachment_fu, donc je ne suis pas vraiment sûr de attachment_fu, mais pour la vieille école Colonne de fichier plugin, j'utiliserais des associations polymorphes.

Mon modèle de "fichier" serait :

    class FileUpload < ActiveRecord::Base
      belongs_to :fileable, :polymorphic => true
      file_column :name
    end

et puis tous les modèles nécessitant une pièce jointe ressembleraient à :

    class Company < ActiveRecord::Base
      has_many :file_uploads, :as => :fileable
    end

La colonne de fichiers n'est plus utile car elle fonctionne sur Safari 3.x et n'est plus maintenue.Mais c'était sympa et simple...Ah, le bon vieux temps...

Pour ce que ça vaut, je pense que Patrick Berkeley a fait du bon travail en gérant plusieurs pièces jointes via le plugin Paperclip.Il a décrit son travail ici :

http://gist.github.com/33011

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top