2016-03-23 13 views
0

Ich habe eine kleine Anwendung mit Gerüst erstellt. Ich poste Daten über die Chrome-Erweiterung "PostMan".So speichern Sie Rails Eingangsparameter in Datei

Dies ist die Standardmethode in meinem Controller erstellen:

# POST /settings 
    # POST /settings.json 
    def create 
    @setting = Setting.new(setting_params) 

    respond_to do |format| 
     if @setting.save 
     format.html { redirect_to @setting, notice: 'Setting was successfully created.' } 
     format.json { render :show, status: :created, location: @setting } 
     puts Setting.new(setting_params).to_yaml 

     else 
     format.html { render :new } 
     format.json { render json: @setting.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

Dies ist das Protokoll in Rails' Konsole:

(0.2ms) begin transaction 
    SQL (1.0ms) INSERT INTO "settings" ("DetectionOnly", "SecRequestBodyAccess", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["DetectionOnly", "f"], ["SecRequestBodyAccess", "f"], ["created_at", "2016-03-23 18:04:42.642492"], ["updated_at", "2016-03-23 18:04:42.642492"] 

ich nur diese Transaktion in eine Log-Datei versucht, bin und Ausgabe im YAML-Format speichern.

Ich habe versucht, dies direkt nach @setting.save.

puts Setting.new(setting_params).to_yaml 

Was mache ich hier falsch?

+0

Meinen Sie, Sie möchten die Yaml in einer separaten Datei speichern und nicht die Protokolldatei? – vee

+0

korrekt, ich möchte die vom Benutzer ausgewählten Werte speichern und sie in einer Konfigurationsdatei speichern. – Deano

+0

Versuchen Sie, ein Protokoll der Transaktionen zu führen, oder versuchen Sie, eine Benutzerkonfigurationsdatei zu behalten? Sie sind sehr unterschiedliche Arten von Dateien. Haben Sie vor, die Benutzer-Konfiguration neu zu laden und sie manuell zu bearbeiten oder anzuzeigen, dann ist YAML gut. Wenn Sie es neu laden müssen und die Leute den Inhalt der Datei nicht bearbeiten/anzeigen müssen, ist JSON besser, besonders wenn andere Sprachen es lesen müssen. Aber warum nicht eine Tabelle mit Benutzerkonfigurationen anstelle von Dateien? –

Antwort

1

Wenn Sie die yaml in eine separate Datei speichern möchten, können Sie die Datei im Append-Modus öffnen und die yaml hängen wie in Ihrem create Aktion folgt, wo Sie puts...:

... 
settings_param_file = ... # File path 
if @setting.save 
    File.open(settings_param_file, 'a') do |file| 
    file << Setting.new(setting_params).to_yaml 
    end 
end 

Auch puts mit in Ihrer Controller-Aktion sollte als ungültig betrachtet werden. Stattdessen sollten Sie Rails.logger oder nur logger in Ihrem Controller verwenden. Um eine Debug-Nachricht zu protokollieren, verwenden Sie:

logger.debug { Setting.new(setting_params).to_yaml } 
+0

Seien Sie vorsichtig dabei. Beim Anhängen werden mehrere YAML-Dokumente in einer Datei erzeugt, was beim erneuten Laden des Inhalts zu unerwarteten Ergebnissen führen kann: 'doc = {'foo' => 1} .to_yaml + {'bar' => 2} .to_yaml # => "--- \ nfoo: 1 \ n --- \ nbar: 2 \ n" '. 'YAML.load (doc) # => {" foo "=> 1}' –

+0

Finde @theTinMan, du weißt, dass ich die OP-Frage beantwortet habe und wie ich die YAML in eine Datei speichern kann. Die Formatierung des Inhalts ist für diese Frage nicht möglich, und ich wollte diesen Teil nicht kommentieren. – vee

+0

Wir können nur die gestellte Frage beantworten, oder wir können auch auf die Torheit hinweisen, etwas zu tun, um der Person zu helfen, zu verstehen, dass es Drachen gibt. Sie wissen vielleicht nicht, dass der Umfang mögliche Fehler beinhalten sollte, was sie tun wollen. –

Verwandte Themen