Pergunta

Eu tenho um modelo com um campo binário que contém um arquivo. Eu gostaria de salvar este arquivo em disco como parte de um processo que eu preciso fazer. Por alguma razão, eu não consigo encontrar nada sobre como fazer isso.

O modelo contém um campo de nome de arquivo e um campo file_contents. Eu gostaria de fazer algo parecido com isto:

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

Qualquer ajuda seria apreciada!

Foi útil?

Solução

Eu não sei por que você gostaria de chamar #save_to_file no conteúdo em vez do modelo de arquivo. Desde que você definidos file_contents como um atributo AR Eu acho que você quer salvá-lo para o DB e salvar no disco. Se for esse o caso, você pode simplesmente adicionar um método como este para o seu modelo:

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

E então você simplesmente fazer:

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

Outras dicas

Em ActiveRecord, o tipo :binary que você usa para definir o seu tipo de coluna em sua migração vai mapear para um tipo blob no banco de dados. De modo que não iria permitir que você salve em um arquivo.

Eu acho que você precisa definir uma classe modelo que não é uma subclasse de ActiveRecord::Base e definir um método save_to_file personalizado para essa classe usando o arquivo i / o suporte em Ruby (a classe IO e sua subclasse, 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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top