J'ai une tâche de râteau pour semer une application avec des données aléatoires en utilisant la gemme faker. Cependant, nous avons également des images (comme des logos) que nous voulons télécharger dans cette tâche de râteau.
Nous avons déjà configuré Paperclip, mais nous n'avons aucun moyen de les télécharger par programme dans une tâche de râteau. Des idées?
Que voulez-vous dire par programmation? Vous pouvez configurer une méthode qui prendra 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 similaires à cela lors du démarrage d'un projet.
Je fais quelque chose comme ça dans une tâche de râteau.
photo_path = './test/fixtures/files/*.jpg'
Dir.glob(photo_path).entries.each do |e|
model = Model.find(<query here>)
model.attachment = File.open(e)
model.save
end
J'espère que ça aide!
Je n'avais pas vraiment 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 signifiaient utiliser le nom de la pièce jointe tel que défini dans le modèle (plutôt que d'écrire une méthode Model_name.attachment). J'espère que c'est clair.