2012-03-27 12 views
3

Ich versuche Schienen haben den Inhalt meiner Datenbank an eine externe Textdatei senden. Ich wollte dies jedes Mal gemacht, wenn ein neuer Benutzer erstellt wird.Wie schreibe ich Inhalt einer Rails-Datenbank in externe Datei

jedoch wenn ich versuche, den folgend in meiner user.rb Modell-Datei zu tun,

before_save :write_data 

def write_data() 
    File.open("data.txt", "w") do |myfile| 
     myfile.write(User.all) 
    end 
end 

Es ist nicht die tatsächlichen Inhalte der Datenbank schreiben, stattdessen zeigt es so etwas wie diese

User:0x109858540 

Kann jemand helfen? Vielen Dank.

+0

Sie finden es möglicherweise lehrreich, 'script/console' auszuführen und dann' require 'user' auszuführen; User.all() '. – sarnold

Antwort

3

User.all gibt ein Ruby-Objekt zurück und wahrscheinlich sagt die write-Methode "Hey, ich erwarte eine Zeichenfolge, das ist keine, also rufe ich die to_s Methode an".

Sie müssen also herausfinden, wie Sie Ihre Benutzerliste in eine Form umwandeln, die Sie in Ihre Textdatei schreiben können, die als Serialisierung bekannt ist. Ah, aber in welchem ​​Format? XML? JSON? YAML? ... oder das gefürchtete CSV-Format? Es gibt integrierte Klassen zum Konvertieren von ActiveRecord-Objekten in verschiedene Formate und Edelsteine ​​zum Umgang mit anderen. Ich nehme an, Sie werden eine to_something Methode aufrufen.

Außerdem bedeutet User.all, dass Sie Ihre gesamte Benutzertabelle (jeden Datensatz) in eine entsprechende Datei schreiben möchten. (Ich denke, Sie könnten sich fragen, warum, aber das ist ein anderes Thema). Daher müssen Sie wahrscheinlich über jeden der Benutzerdatensätze iterieren.

-Code sieht wohl eher wie

def write_data # It's ruby -- don't need no stinkin' empty parenthesis!! :-) 
    my_file = File.open("data.txt", "w") 
    User.all.each do |u| 
    my_file.write u.to_something 
    end 
end 

Sie könnten eine neue Zeile am Ende jeder Zeile setzen müssen.

Verwandte Themen