Je viens juste de commencer à apprendre le ruby sur rails et je voudrais créer une application qui me permettra d'ajouter des fichiers à la base de données. Actuellement, je développe l'application rails en utilisant le plugin Aptana pour Eclipse et l'application utilise le sqllite db par défaut. J'ai essayé de générer un échafaudage avec les paramètres suivants: documents title:string file:varbinary
. Ensuite, je fais un 'rake' -> 'db' -> 'migrate'. Lorsque je migre vers localhost/documents et que je clique sur 'Nouveau document', l'application échoue et affiche une erreur. Ce que je voudrais faire est de cliquer sur 'Nouveau document', d'avoir un champ qui me permettra de rechercher un document sur mon ordinateur local, de sélectionner le document et de l'ajouter à l'application db on the rails.Ajouter un fichier à une base de données dans une application Ruby on Rails?
Répondre
Paperclip est plus recommandé que attachment_fu ces jours-ci. C'est vraiment simple et facile à utiliser avec votre modèle d'enregistrement actif.
Est-ce un type particulier de fichier que vous souhaitez ajouter? Je demande juste parce que si ce ne sont pas des données qui profitent d'une base de données (les données textuelles peuvent être recherchées, les données binaires ne le sont pas), il vaut mieux le stocker dans le système de fichiers et le servir directement - en particulier pour des choses comme les images ou la vidéo - plutôt que de l'insérer dans une base de données et d'avoir à passer par votre application chaque fois qu'un utilisateur le demande. Je ne dis pas qu'il n'y a pas de raisons pour lesquelles vous voudriez avoir un fichier dans la base de données, mais je traite cela en dernier recours et en dix ans de programmation web, je n'ai pas rencontré un cas où c'était nécessaire.
Je vous recommande vivement le plugin attachment_fu car cela vous permet de créer des modèles avec des pièces jointes plutôt bien, Paperclip plugin est un autre bon aussi! Si vous avez du mal à décider lequel utiliser, pour autant que je me souvienne, Paperclip facilite la tâche pour plusieurs pièces jointes, comme un album a beaucoup de photos, et Attachment_fu est plus facile pour les pièces jointes uniques, comme un utilisateur a un image d'affichage.
excellent. Trouvé un bon tutoriel ici: 'http: // clarkware.com/cgi/blosxom/2007/02/24 # FileUploadFu' – Seth
Nous faisons quelque chose comme ça sur un site que je gère. Au lieu de stocker ces fichiers dans une base de données, je serais d'accord avec les autres affiches ici et je vous recommande d'essayer quelque chose comme Paperclip. Une mise en garde: si vous voulez un contrôle d'accès, assurez-vous que trombone ne sauvegarde pas vos fichiers quelque part sous/public, où n'importe qui pourrait y accéder s'il connaissait l'URL. Livrer des fichiers à l'utilisateur via send_file dans votre contrôleur.
Nous essayons de mettre en œuvre un système de gestion de documents, qui implémente le processus de l'entreprise. Par conséquent, le document doit être stocké dans un référentiel central de somesort, et il doit exister dans des états auxquels certains utilisateurs ne peuvent accéder qu'à certains moments. Avec cette quantité de contrôle nécessaire - je pensais que ce ne serait possible qu'en utilisant un db? – Seth
Vous pouvez réellement l'implémenter de différentes manières: si les données sont stockées dans une zone du système de fichiers accessible uniquement par l'utilisateur exécutant rails et sysadmins, vous pouvez faire ce que vous voulez en termes de contrôle d'accès car les demandes de fichiers doivent passer par votre application, de sorte que vous pouvez stocker les détails des autorisations dans la base de données et ne servir que les fichiers aux utilisateurs autorisés à travers votre couche d'application. Vous pouvez également utiliser des autorisations sur le système de fichiers et le gérer de cette façon, ce qui est peut-être plus simple pour vos administrateurs système. – glenatron