wie verwenden Sie ein array in form_for?
-
21-09-2019 - |
Frage
Ich habe ein benutzermodell, die enthält ein Feld namens, sagen wir, text1.Der Nutzer/die neue form, die ich haben will, 4 einzelne Textfelder für diese text1.In meinem Modell werde ich die Werte aus diesen Feldern und verketten Sie zusammen, als durch Kommas getrennte Werte, und speichern Sie Sie in der DB.Um Ihnen ein Verständnis, das ist, was ich will.
<input type="text" name="user[text1][]" />
<input type="text" name="user[text1][]" />
<input type="text" name="user[text1][]" />
<input type="text" name="user[text1][]" />
Wie bekomme ich diese mit form_for-Helfer-Methode?Für jetzt, bitte Mach dir keine sorgen über die accessor-Methode in das Modell, dass alles erledigt ist.Dank einer Tonne.
Lösung
Fügen Sie einige virtuelle Attribute zu Ihren User
Modell
class User < ActiveRecord::Base
attr_accessor :text1_part1
attr_accessor :text1_part2
attr_accessor :text1_part3
attr_accessor :text1_part4
def before_validation
self.text1 = "#{self.text1_part1}#{self.text1_part2}#{self.text1_part3}#{self.text1_part4}"
end
# make sure you fill the correct values for
# the text parts for an existing record.
# This can be done by implementing `after_find` or overriding
# `text1=`.
end
In Ihrem code anzeigen die Verwendung der neuen Attribute anstelle von text1
<% form_for(:user) do |f| %>
#some code
<%= f.text_field :text1_part1>
<%= f.text_field :text1_part2>
<%= f.text_field :text1_part3>
<%= f.text_field :text1_part4>
#some code
<%= f.submit "Save">
<% end %>
Andere Tipps
Die Vorherige Antwort gibt eine Lösung, ich bin nur eine hintergrund, warum das, was Sie fordern das funktioniert nicht so ist, wie Sie vielleicht hoffen.
Sie können wirklich erstellen eines Formulars mit multiple-input-Felder mit dem gleichen Namen, und die Daten werden veröffentlicht.Allerdings, wenn Schienen erhält die post automatisch parametrisiert die post-Daten und/oder url-Parameter zu.Im wesentlichen teilt sich auf die & und ordnet die Schlüssel/Wert-Paare, die params-hash.Das Ergebnis ist, params[:user][:text1] (aus dem Beispiel) wird der Wert der letzten Instanz des Benutzers[text1] es begegnet, da ist es einfach Wert Zuordnung zu einem vorhandenen Schlüssel.Möchten Sie vielleicht zu Graben, in ActiveRecord multiparameter-Zuordnungen um eine Idee zu bekommen, wie die datetime-Attribute zu erhalten, da Sie ähnlich sind, um Ihre use-case.
Ich arbeite an etwas ähnliches, und es klingt vielleicht nach der Serialisierung ist, was Sie suchen.Leider habe ich nicht meine Probleme gelöst noch nicht, also kann ich nicht bieten etwas mehr Beton.