Railsの:ファイルへのバイナリフィールドの内容を保存します
-
06-09-2019 - |
質問
私は、ファイルが含まれているバイナリフィールドでモデルを持っています。私は私が行う必要があるプロセスの一環として、このファイルをディスクに保存したいと思います。何らかの理由で、私はこれを行う方法の何かを見つけることができません。
モデルは、ファイル名のフィールドとfile_contentsフィールドが含まれています。私はこのような何かをしたいと思います:
model = SomeModel.find :first
model.file_contents.save_to_file(model.filename)
すべてのヘルプをいただければ幸いです!
解決
あなたはファイルの内容の代わりに、モデルに#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
他のヒント
のActiveRecordでは、あなたはあなたの移行であなたの列の型を定義するために使用:binary
タイプは、データベース内のblob
型にマップしようとしています。だから、あなたは、ファイルに保存することができません。
私はあなたがActiveRecord::Base
のサブクラスではないモデルクラスを定義するとRuby(save_to_file
クラスとそのサブクラス、IO
)内のファイルI / Oのサポートを使用してそのクラスのカスタム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
所属していません StackOverflow