2


1

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

モデルはファイル名フィールドとファイル内容フィールドを含む。 私はこのようなことをしたいのですが。

model = SomeModel.find:最初のmodel.file_contents.save_to_file(model.filename)

任意の助けは大歓迎です!

2 Answer


2


ActiveRecordでは、移行で列タイプを定義するために使用する `:binary +`タイプは、データベースの ` blob +`タイプにマッピングされます。 だからそれはあなたがファイルに保存することはできません。

`+ ActiveRecord

Base `のサブクラスではないモデルクラスを定義し、RubyのファイルI / Oサポートを使用してそのクラスのカスタム ` 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


2


モデルではなくファイルの内容に対して#save_to_fileを呼び出す必要がある理由がわかりません。 _file_contents_をAR属性として定義したので、それをDB *に保存し、*ディスクに保存したいと思います。 その場合は、単にこのようなメソッドをモデルに追加します。

クラスYourModel <ActiveRecord :: Base#... あなたのもの... def save_to_file File.open(filename、 "w")do | f | f.write(file_contents)終了終了

そして、あなたは単にするだけです:

obj = YourModel.find(:first)obj.save_to_file