Question

J'ai un modèle avec un champ binaire contenant un fichier. Je voudrais enregistrer ce fichier sur le disque dans le cadre d'un processus que je dois faire. Pour une raison quelconque, je ne peux pas trouver quoi que ce soit sur la façon de le faire.

Le modèle contient un champ de nom de fichier et un champ de file_contents. Je voudrais faire quelque chose comme ceci:

model = SomeModel.find :first
model.file_contents.save_to_file(model.filename)

Toute aide serait appréciée!

Était-ce utile?

La solution

Je ne sais pas pourquoi vous voulez appeler #save_to_file sur le contenu du fichier à la place du modèle. Depuis que vous avez défini file_contents comme un attribut AR Je suppose que vous voulez enregistrer dans le DB et enregistrer sur le disque. Si tel est le cas, vous pouvez simplement ajouter une méthode comme celui-ci à votre modèle:

 class YourModel < ActiveRecord::Base
   # ... your stuff ...
   def save_to_file
     File.open(filename, "w") do |f|
       f.write(file_contents)
     end
   end
 end

Et alors vous simplement faire:

obj = YourModel.find(:first)
obj.save_to_file

Autres conseils

Dans ActiveRecord, le type de :binary que vous utilisez pour définir votre type de colonne dans votre migration va correspondre à un type blob dans la base de données. Donc, cela ne vous permettra pas d'enregistrer dans un fichier.

Je pense que vous devez définir une classe de modèle qui n'est pas une sous-classe de ActiveRecord::Base et définir une méthode de save_to_file personnalisée pour cette classe en utilisant le fichier i / o soutien Ruby (la classe IO et sa sous-classe, File).

class SomeModel
 attr_accessor :file
 attr_accessor :contents

 def initialize
  @file = File.new("file.xyz", "w")
 end

 def save_and_close
  @file << contents
  @file.close
 end
end
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top