Railsの:ファイルへのバイナリフィールドの内容を保存します

StackOverflow https://stackoverflow.com/questions/926935

  •  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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top