Domanda

Ho un modello con un campo binario che contiene un file. Mi piacerebbe salvare il file su disco come parte di un processo che devo fare. Per qualche ragione, non riesco a trovare nulla su come fare questo.

Il modello contiene un campo nome di file e un campo file_contents. Mi piacerebbe fare qualcosa di simile:

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

Qualsiasi aiuto sarebbe apprezzato!

È stato utile?

Soluzione

Non so perché ci si vuole chiamare #save_to_file sui contenuti dei file al posto del modello. Dal momento che si è definito file_contents come un attributo AR Credo che si desidera salvare al DB e salvarlo su disco. Se questo è il caso si può semplicemente aggiungere un metodo come questo per il vostro modello:

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

E poi si sarebbe semplicemente:

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

Altri suggerimenti

In ActiveRecord, il tipo :binary che si utilizza per definire il tipo di colonna nella migrazione sta per mappare a un tipo blob nel database. In modo che non avrebbe permesso di salvare in un file.

Credo che si avrebbe bisogno di definire una classe modello che non è una sottoclasse di ActiveRecord::Base e definire un metodo save_to_file personalizzato per quella classe utilizzando il file I / O di supporto in Ruby (la classe IO e la sua sottoclasse, 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top