2016-07-31 10 views
0

Ich bin neu bei Schienen und ich habe eine ziemlich einfache Situation zu lösen, aber ich kann nicht herausfinden, wie ich damit verfahren soll.Schienen: einfaches "Einstellungs" -Modell mit Schlüssel, Wertattribute

Ich möchte ein einfaches 'Setting' Modell mit key, value Attributen erstellen. 'SettingsController' darf nur zwei öffentliche Methoden enthalten: index und update. Nur index Aktion wird eine Ansichtsdatei mit einem Formular haben, dessen Felder jeden Datensatz der Tabelle 'Einstellungen' darstellen.

Ich möchte in der Lage sein, einige zulässige Schlüssel zu definieren (kann eine private Methode verwenden), und ich möchte das Formular zum Erstellen oder Aktualisieren des Datensatzes der relevanten Felder beim Senden des Formulars an update Aktion.

Nun, ich weiß nicht genau, welchen Code sollte ich in der Steuerung verwenden für index und update Aktionen und in der Index-View-Datei für das Formular, das/update mehrere Datensätze gleichzeitig erstellen und aktualisierte Werte zeigen, können alle die Zeit. Wie gehe ich damit vor?

Update # 1:

Ich habe es geschafft, wie unten einige Controller-Aktionen schreiben (basierend auf einigen Tutorial):

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 Formularcode in Indexansicht Vorlage ist unten angegeben:

<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 %> 

Diese Formulare speichert die Werte korrekt in der Datenbank, aber die gespeicherten Werte bestehen bleiben nicht in Formularfeldern.

+0

Warum enthalten Sie nicht, was Code Sie bereits geschrieben haben, damit wir sehen können, wie Sie über Ihr Problem denken. – MarsAtomic

+0

Ich habe es geschafft, Code basierend auf Tutorials zu schreiben (Beitrag wurde oben aktualisiert), aber da meine Anforderungen etwas anders sind als das Tutorial, das mir vorschwebt, gespeicherte Werte in Formularfeldern beizubehalten. –

+0

Sind Sie offen für die Verwendung eines Edelsteins, um zu bekommen, was Sie wollen, oder sind Sie entschlossen, Ihren eigenen Mechanismus von Grund auf neu zu erstellen? – MarsAtomic

Antwort

1

Vielleicht ist das Problem in der index Aktion. Setting.all gibt ein Array von Setting record zurück, kein Hash wie {key1: value, key2: value}, von dem ich glaube, dass Sie versuchen, es zu erreichen. Das Formular zeigt daher Daten nicht ordnungsgemäß an. Sie können dies versuchen:

def index 
    @setting = {} 
    pairs = Setting.pluck(:key, :value) 
    pairs.each { |key, value| @setting[key] = value } 
    @setting 
end 
+0

Danke, aber ich nehme an, dass ich auch den Formularcode in der Indexansicht ändern muss, wie soll ich ihn ändern? –

+0

Nun, ich war in der Lage, den gespeicherten Wert in dem Feld beizubehalten, indem ich einen zweiten Parameter basierend auf '@ setting' Variable wie diese '<% = text_field_tag' Einstellungen [site_title]", @setting ["site_title"]%> 'verwendete Das Problem ist jetzt gelöst, danke nochmal. –