Rails: сохранение содержимого двоичного поля в файл - PullRequest
2 голосов
/ 29 мая 2009

У меня есть модель с двоичным полем, которое содержит файл. Я хотел бы сохранить этот файл на диск как часть процесса, который мне нужно сделать. По какой-то причине я не могу найти ничего о том, как это сделать.

Модель содержит поле имени файла и поле file_contents. Я хотел бы сделать что-то вроде этого:

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

Любая помощь будет оценена!

Ответы [ 2 ]

2 голосов
/ 30 мая 2009

Я не знаю, почему вы хотите вызвать #save_to_file для содержимого файла вместо модели. Поскольку вы определили file_contents как атрибут 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
2 голосов
/ 30 мая 2009

В ActiveRecord тип :binary, который вы используете для определения типа столбца в своей миграции, будет соответствовать типу blob в базе данных. Так что это не позволит вам сохранить в файл.

Я думаю, вам нужно определить класс модели, который не является подклассом ActiveRecord::Base, и определить собственный метод save_to_file для этого класса, используя поддержку файлового ввода-вывода в Ruby (класс 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
...