2009-05-29 19 views
2

Ich habe ein Modell mit einem Binärfeld, das eine Datei enthält. Ich möchte diese Datei als Teil eines Prozesses, den ich machen muss, auf der Festplatte speichern. Aus irgendeinem Grund kann ich nichts darüber finden, wie man das macht.Rails: Speichern des Inhalts eines Binärfelds in einer Datei

Das Modell enthält ein Feld Dateiname und ein Feld file_contents. Ich würde gerne so etwas tun:

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

Jede Hilfe wäre willkommen!

Antwort

2

Ich weiß nicht, warum Sie #save_to_file auf den Dateiinhalt anstelle des Modells aufrufen möchten. Da Sie file_contents als ein AR-Attribut definiert haben, denke ich, dass Sie es in den DB und speichern möchten, speichern Sie es auf der Festplatte.

class YourModel < ActiveRecord::Base 
    # ... your stuff ... 
    def save_to_file 
    File.open(filename, "w") do |f| 
     f.write(file_contents) 
    end 
    end 
end 

Und dann würde man einfach tun: Wenn das der Fall ist, können Sie einfach eine Methode, wie diese zu Ihrem Modell hinzufügen

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

In ActiveRecord wird der Typ :binary, den Sie verwenden, um den Spaltentyp in Ihrer Migration zu definieren, in der Datenbank einem blob-Typ zugeordnet. Das würde Ihnen nicht erlauben, in einer Datei zu speichern.

Ich glaube, Sie müßten eine Modellklasse definieren, die nicht eine Unterklasse von ActiveRecord::Base ist und eine für diese Klasse benutzerdefinierten save_to_file Methode definieren Sie die Datei mit i/o Unterstützung in Ruby (die IO Klasse und ihre Unterklasse, 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 
Verwandte Themen