2009-05-29 14 views
2

ファイルを含むバイナリフィールドを持つモデルがあります。私はこのファイルをディスクに保存する必要があります。何らかの理由で、私はこれを行う方法について何も見つけることができません。Rails:バイナリフィールドの内容をファイルに保存する

このモデルには、filenameフィールドとfile_contentsフィールドが含まれています。私はこのような何かをしたいと思います:

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

助けていただければ幸いです!

答えて

2

なぜモデルの代わりにファイルの内容に#save_to_fileを呼び出すかわかりません。あなたはAR属性としてfile_contentsを定義したので、私はあなたがDB にそれを保存してディスクに保存したいと思います。

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

ActiveRecordでは、移行時に列タイプを定義するために使用する:binaryタイプは、データベースのblobタイプにマップされます。つまり、ファイルに保存することはできません。

私はあなたがActiveRecord::Baseのサブクラスではないモデルクラスを定義するとRuby(IOクラスとそのサブクラス、File)内のファイルI/Oのサポートを使用してそのクラスのカスタムsave_to_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 
関連する問題