Rails: Salvando o conteúdo de um campo binário para um arquivo
-
06-09-2019 - |
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!
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