Рельсы:Сохранение содержимого двоичного поля в файл
-
06-09-2019 - |
Вопрос
У меня есть модель с двоичным полем, которое содержит файл.Я бы хотел сохранить этот файл на диск как часть процесса, который мне нужно выполнить.По какой-то причине я ничего не могу найти о том, как это сделать.
Модель содержит поле filename и поле file_contents.Я бы хотел сделать что-то вроде этого:
model = SomeModel.find :first
model.file_contents.save_to_file(model.filename)
Мы будем признательны за любую помощь!
Решение
Я не знаю, почему вы хотите вызвать #save_to_file для содержимого файла, а не для модели.С тех пор, как вы определили файл_контенты в качестве атрибута AR, я полагаю, вы хотите сохранить его в базе данных и сохраните его на диск.Если это так, вы можете просто добавить подобный метод в свою модель:
class YourModel < ActiveRecord::Base
# ... your stuff ...
def save_to_file
File.open(filename, "w") do |f|
f.write(file_contents)
end
end
end
И тогда вы бы просто сделали:
obj = YourModel.find(:first)
obj.save_to_file
Другие советы
В ActiveRecord :binary
тип, который вы используете для определения типа столбца в процессе миграции, будет сопоставлен blob
введите в базе данных.Так что это не позволило бы вам сохранить файл.
Я думаю, вам нужно было бы определить класс модели, который не является подклассом ActiveRecord::Base
и определите пользовательский save_to_file
метод для этого класса, использующий поддержку файлового ввода-вывода в Ruby (the IO
класс и его подкласс, 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