2

ファイルを含むバイナリフィールドを持つモデルがあります。実行する必要のあるプロセスの一部として、このファイルをディスクに保存したいと思います。どういうわけか、これを行う方法については何も見つかりません。

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

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_fileIOFile

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 属性として定義したので、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
于 2009-05-30T03:01:45.770 に答える