2017-06-26 4 views
3

Ich versuche zu machen, so dass der Benutzer eine Reihe von Optionen sieht (ich versuche gerade mit Kontrollkästchen) als wählt mehrere Elemente, dann wird in eine einzige Zeichenfolge durch Kommas verbunden wenn der Benutzer sie vorträgt, ex:Rails: Mehrere Optionen in einer einzigen Zeichenfolge

<%= f.check_box :answer %><%= option.description %> 
<%= f.check_box :answer %><%= option.description %> 
<%= f.check_box :answer %><%= option.description %> 

wo: Antwort ein Attribut in meiner Antwort-Modell ist und die Beschreibung ein Attribut in meinem Option Modell ist, wenn mehrere Optionen ausgewählt werden, möchte ich sie als einzelne Zeichenfolge gespeichert werden wie folgt:

"description1,description2,description3" 

um es in einer einzigen Spalte in meinem da zu speichern Tabase, wie kann ich das erreichen?

Antwort

1

können Sie mehrere Kontrollkästchen erstellen sie die multiple Option hinzugefügt, auf diese Weise können Sie haben:

<%= f.check_box :answer, { multiple: true }, 'first', false %>First 
<%= f.check_box :answer, { multiple: true }, 'second', false %>Second 
<%= f.check_box :answer, { multiple: true }, 'third', false %>Third 

Hinweis Sie auch die false Option angeben müssen, um alle unerwünschten Werte „können loszuwerden“ eine Gruppe von mehreren check_boxes generiert, etwa ["0", "0", "second", "0", "third"], die wegen der unchecked default values, also, mit dem letzten Parameter in Ihrem check_box Helfer, erhalten Sie nur ["second", "third"].

So, jetzt nur ein Array mit einfacher ist, diese Werte zu verbinden, bevor persiting das Objekt in der Datenbank, kann diese direkt in der Steuerung erfolgen, wenn Sie wollen:

@answer = Answer.new(answer_params) 
@answer.answer = params['answer']['answer'].join(',') 

Hier können Sie die Werte erhalten aus die params ['antwort'], das Formular und speziell die Checkboxen, die Sie erstellt haben, da es ein Array ist, das Sie join zu sie mit einem Komma , verwenden können, so erhalten Sie "zweite, dritte" und Auf diese Weise können Sie das Antwortattribut für Ihr Antwortmodell mit mehreren Ankreuzfeldern festlegen.

+0

Vielen Dank! Gibt es eine Möglichkeit, alle Params in der zweiten Zeile aufzurufen? Ich habe eine variable Anzahl von Optionen für jede Antwort und aus irgendeinem Grund kann ich nicht die Antwort auf die Datenbank speichern, kann das Problem sein? – IvanH

+0

Meinen Sie, über ein Options-ActiveRecord-Ergebnis zu iterieren und jede 'option.description' zu erhalten? –

+0

Ich erstelle derzeit eine Checkbox für jede einzelne Option, die die Frage hat, nachdem ich die Konsole überprüft habe, habe ich das Problem zu "Unerreichter Parameter: Antwort" verfolgt, auch kann ich ein if im Controller hinzufügen, um zu vermeiden, dass die Params beitreten es ist schon eine Schnur? eine Antwort, die der Benutzer mit einem text_field beantwortet – IvanH

Verwandte Themen