我有一个带有包含文件的二进制字段的模型。我想将此文件保存到磁盘作为我需要做的过程的一部分。出于某种原因,我找不到有关如何执行此操作的任何信息。
该模型包含一个文件名字段和一个文件内容字段。我想做这样的事情:
model = SomeModel.find :first
model.file_contents.save_to_file(model.filename)
任何帮助,将不胜感激!
我有一个带有包含文件的二进制字段的模型。我想将此文件保存到磁盘作为我需要做的过程的一部分。出于某种原因,我找不到有关如何执行此操作的任何信息。
该模型包含一个文件名字段和一个文件内容字段。我想做这样的事情:
model = SomeModel.find :first
model.file_contents.save_to_file(model.filename)
任何帮助,将不胜感激!
在 ActiveRecord 中,:binary
用于在迁移中定义列类型的类型将映射到blob
数据库中的类型。所以这不允许你保存到文件中。
我认为您需要定义一个不是子类的模型类,并使用 Ruby 中的文件 i/o 支持(类及其子类)为该类ActiveRecord::Base
定义一个自定义save_to_file
方法。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
我不知道您为什么要对文件内容而不是模型调用#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