Grundsätzlich möchte ich eine Option in meinem Formular erstellen, die Kontrollkästchen akzeptiert (0 bis alle Werte akzeptiert).Wie kann ich mehrere Checkboxed-Werte mit SimpleForm ordnungsgemäß speichern?
Ich liebe die Struktur von enums, weil ich die Leistungsgeschwindigkeit der Speicherung der Ganzzahl in der DB, aber ich kann das Symbol in meinem Code verweisen. Ich bezweifle jedoch, dass ich Enum verwenden kann, wenn ich mehrere Werte wie ein Kontrollkästchen speichere.
So stelle ich mir vor, dass es am besten funktioniert, wenn man es einfach als String speichert, der auch ein Array ist. So etwas wie folgt aus:
# refactor_rule :string default([]), is an Array
Dann meine Form wie folgt aussieht:
<%= f.input :refactor_rule, collection: ["dry", "concise", "performant"], as: :check_boxes, class: "form-control" %>
Das Problem bei diesem Ansatz ist, wenn ich speichern nur 1 oder 2 der Optionen (dh nicht alle), ist dies was das Attribut wie folgt aussieht:
q.refactor_rule
=> ["", "dry", "concise"]
was ich hasse, wegen der leeren Wert bei [0]
.
So sind meine Fragen wie folgt:
- Was ist die performante Art und Weise, dies zu erreichen? Beachten Sie, dass die Optionen in meinem Kontrollkästchen statisch sind, aber das Feld muss mehrere nicht 1 akzeptieren?
- Wie speichere ich nur die geprüften Werte und nicht leere Werte?
- Gibt es eine Möglichkeit, die integrierte Enum-Funktionalität von Rails zu nutzen, obwohl ich mehrere Werte speichere?
Wenn ich kein 'Array' in der DB verwende, wie kann ich es speichern? Ein Faden? Ich habe es bereits als ein Array in der Datenbank eingerichtet. – marcamillion
Sie möchten dies nicht als String speichern, da Sie es jedes Mal dekodieren müssen, wenn Sie dies lesen/aktualisieren möchten. Wenn es für Sie Sinn macht, machen Sie ein anderes Modell ("RefactorRule" genannt) mit einer Beziehung "has_many: refactor_rules". Auf diese Weise können Sie die Kraft der Assoziation nutzen und Rails mit voller Geschwindigkeit nutzen :) – Stan