2

我有一个带有包含文件的二进制字段的模型。我想将此文件保存到磁盘作为我需要做的过程的一部分。出于某种原因,我找不到有关如何执行此操作的任何信息。

该模型包含一个文件名字段和一个文件内容字段。我想做这样的事情:

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

任何帮助,将不胜感激!

4

2 回答 2

2

在 ActiveRecord 中,:binary用于在迁移中定义列类型的类型将映射到blob数据库中的类型。所以这不允许你保存到文件中。

我认为您需要定义一个不是子类的模型类,并使用 Ruby 中的文件 i/o 支持(类及其子类)为该类ActiveRecord::Base定义一个自定义save_to_file方法。IOFile

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
于 2009-05-29T20:50:47.890 回答
2

我不知道您为什么要对文件内容而不是模型调用#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
于 2009-05-30T03:01:45.770 回答