2016-10-19 4 views
0

Ich habe ein Formular, das beim Übergeben einen neuen Datensatz in einer Datenbank erstellt. Ich habe zwei Werte in der Datenbank, Wert_1 & Wert_2. In der Form gibt es ein Eingabefeld für Wert_1, das ein Dropdown-Wert von Ja und Nein ist. Wenn das Formular abgeschickt wird, möchte ich, dass Wert_1 und Wert_2 auf den Wert gesetzt werden, der im Eingabefeld für Wert_1 ausgewählt wurde. Wenn dropdown für value_1 auf yes gesetzt ist, wird value_2 ebenfalls auf yes gesetzt.Eine Formulareingabe, um zwei Datenbankwerte festzulegen

ich zur Zeit die folgenden aber verwende glaube, es muss eine elegantere Lösung sein:

params[:person][:free] = params[:person][:trial] 
@person = Person.new(params[:person]) 
@person.update_attribute(:free, params[:person][:free]) 
+0

Da Sie Person erstellen, nachdem Sie den Wert von params [: person] [: free] geändert haben, denke ich nicht, dass Sie diese letzte Zeile benötigen. Sie können @person einfach speichern. – Sajan

+0

Seltsamerweise dachte ich das selbe, aber es war nicht updaten, daher musste ich das update hinzufügen. Am Ende wurde es verfeinert auf '@ person.update_attribute (: free, params [: person] [: trial])' wie ich den Punkt nicht sehe einen Wert zuweisen 'params [: person] [: free]' wenn es nicht auf 'Person.new' wirkt – EamonnMcElroy

+0

Kannst du ein' p params [: person] 'nach der ersten Zeile setzen und in rails console sehen, welchen Wert es hat zeigt ? – Sajan

Antwort

0

Zuerst Sie sollten darüber nachdenken, was Sie wirklich wollen. Was ist deine Logik? Soll value_2 immer gleich value_1 sein? Ich hoffe nicht, denn in diesem Fall brauchst du keine zweite Spalte in deiner Datenbank. Soll Wert_2 gleich Wert_1 sein, nur die Erstellung eines neuen Datensatzes, aber zulassen, dass er danach bearbeitet wird? In diesem Fall sollten Sie die Logik in Ihrem Modell mit einem Rückruf setzen:

In Ihrem Modell hinzu:

before_create :set_value_2 

private 

def set_value_2 
    self.value_2 = value_1 
end 

Die private Aussage ist, weil Sie die Methode für den Zugriff außerhalb des Modells nicht jemand will sich .

Verwandte Themen