2016-07-30 8 views
0

ich Einstellungen Controller Setup wie diese haben:Rails form_tag nicht den vorhandenen Feldwert anzeigt

class Admin::SettingsController < ApplicationController 

    def index 
    @settings = Setting.all 
    end 

    def update 
    setting_params.each do |key, value| 
     Setting.where(key: key).first.update_attribute :value, value 
    end 

    redirect_to admin_settings_path, notice: "Settings saved." 
    end 

    private 

    def setting_params 
    params.require(:settings).permit(:site_title, :site_desc) 
    end 

end 

Der Index Aktion eine View-Datei in den entsprechenden Pfad hat, ist ihr Code wie folgt:

<h1>Settings</h1> 

<%= form_tag admin_settings_path, method: "put" do %> 

    <p> 
     <label>Site Title:</label> 
     <%= text_field_tag "settings[site_title]" %> 
    </p> 

    <p> 
     <label>Site Description:</label> 
     <%= text_field_tag "settings[site_desc]" %> 
    </p> 

    <p> 
     <%= submit_tag "Save settings" %> 
    </p> 

<% end %> 

Jetzt kann ich diese Felder Daten in relevanten Modell speichern und aktualisieren, und ich kann die Daten über den Befehl Setting.all in Rails-Konsole sehen. Aber das Problem ist, nach dem Speichern des Datensatzes über das Formular, wenn ich die Einstellungen Indexseite neu laden das Formular leer ist und es zeigt nicht zuvor gespeicherte Werte in den Feldern.

Was mache ich hier falsch?

Antwort

0

Ich denke, Sie müssen form_for(@variable) statt nur ein form_tag verwenden, weil Sie das Objekt nach dem Speichern persisten müssen.

form_for mit Ressourcen arbeitet, werfen Sie einen Blick hier: http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html

+0

Können wir nicht in den Feldern mit form_tag Helfer Wert persistent zu machen. Zweitens habe ich versucht, form_for helper mit der @setting-Variable zu verwenden, aber es heißt "Das erste Argument in der Form kann kein nil enthalten oder leer sein". –