Рельсы:Сохранение содержимого двоичного поля в файл

StackOverflow https://stackoverflow.com/questions/926935

  •  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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top