67 votes

Comment définir un fichier par programme en utilisant Paperclip

J'ai une tâche de ratissage pour ensemencer une application avec des données aléatoires à l'aide de la fausse gemme. Cependant, nous souhaitons également télécharger des images (comme des logos) dans cette tâche de rake.

Nous avons déjà configuré Paperclip, mais nous n'avons pas le moyen de les télécharger par programme dans une tâche rake. Des idées?

140voto

theIV Points 12999

Qu'entendez-vous par programme? Vous pouvez configurer une méthode qui prend un chemin de fichier le long des lignes de

 my_model_instance = MyModel.new
file = File.open(file_path)
my_model_instance.attachment = file
file.close
my_model_instance.save!
 

#attachment provient de notre déclaration Paperclip dans notre modèle. Dans ce cas, notre modèle ressemble à

 class MyModel < ActiveRecord::Base
  has_attached_file :attachment
end
 

Nous avons fait des choses semblables à celles-ci pour amorcer un projet.

12voto

jonnii Points 17046

Je fais quelque chose comme ça dans une tâche de ratissage.

 photo_path = './test/fixtures/files/*.jpg'
Dir.glob(photo_path).entries.each do |e|
  model = Model.find(...)        
  model.attachment = File.open(e)
  modle.save
end
 

J'espère que ça aide!

8voto

winfred Points 51

Je n'avais pas réellement besoin d'écrire une méthode pour cela. Beaucoup plus simple.

Dans le modèle ->

 Class Model_Name < ActiveRecord::Base
  has_attached_file :my_attachment,
  :params_for_attachment
 

Dans seed.db ->

 my_instance = Model_name.new
my_instance.my_attachment = File.open('path/to/file/relative/to/app')
my_instance.save!
 

Peut-être que les réponses précédentes impliquaient d'utiliser le nom de la pièce jointe tel que défini dans le modèle (plutôt que d'écrire une méthode Nom_modèle.attachment). J'espère que c'est clair.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X