Gibt es eine Methode (oder eine Möglichkeit, ähnliche Funktionen abzurufen), um eine fields_for_with_index
auszuführen?
Beispiel:
<% f.fields_for_with_index :questions do |builder, index| %>
<%= render 'some_form', :f => builder, :i => index %>
<% end %>
Dieser Teil, der gerendert wird, muss wissen, was der aktuelle Index in der fields_for
Schleife ist.
ruby-on-rails
loops
fields-for
Shpigford
quelle
quelle
Antworten:
Dies wäre tatsächlich ein besserer Ansatz, wenn Sie die Rails-Dokumentation genauer verfolgen:
Von: http://railsapi.com/doc/rails-v3.0.4/classes/ActionView/Helpers/FormHelper.html#M006456
quelle
Die Antwort ist recht einfach, da die Lösung in Rails bereitgestellt wird. Sie können
f.options
Parameter verwenden. Also, in deinem gerenderten_some_form.html.erb
,Auf den Index kann zugegriffen werden durch:
Sie müssen nichts anderes tun.
Update: Es scheint, dass meine Antwort nicht klar genug war ...
Original HTML Datei:
Gerendertes Unterformular:
quelle
<%= f.options[:child_index] %>
Ihr gerendertes Unterformular (in diesem Fall: _some_form.html.erb) aufrufen, nicht das Originalbuilder
. Die Antwort wurde zur weiteren Klärung aktualisiert.nil
Ab Rails 4.0.2 ist jetzt ein Index im FormBuilder-Objekt enthalten:
https://api.rubyonrails.org/classes/ActionView/Helpers/FormBuilder.html#method-i-fields_for
Beispielsweise:
quelle
project_fields.options[:child_index]
. Also ich mag diesen Weg besser!Für Schienen 4+
Monkey Patch für Rails 3-Unterstützung
Um
f.index
in Rails 3 arbeiten zu können, müssen Sie Ihren Projektinitialisierern einen Affen-Patch hinzufügen, um diese Funktionalität hinzuzufügenfields_for
quelle
.index
ist viel sauberer.Kasse Rendern einer Sammlung von Partials . Wenn Ihre Anforderung lautet, dass eine Vorlage über ein Array iterieren und für jedes der Elemente eine Untervorlage rendern muss.
Dadurch wird „_children.erb“ gerendert und die lokale Variable 'children' zur Anzeige an die Vorlage übergeben. Der Vorlage wird automatisch ein Iterationszähler mit dem Namen des Formulars zur Verfügung gestellt
partial_name_counter
. Im obigen Beispiel würde die Vorlage eingezogenchildren_counter
.Hoffe das hilft.
quelle
question_comment_form
als meinIch sehe keinen vernünftigen Weg, dies durch die von Rails bereitgestellten Wege zu tun, zumindest nicht in -v3.2.14
@Sheharyar Naseer verweist auf den Options-Hash, der zur Lösung des Problems verwendet werden kann, aber nicht so weit ich sehen kann, wie er es vorzuschlagen scheint.
Ich habe das gemacht =>
oder
In meinem Fall wird
g.object_name
eine solche Zeichenfolge"gallery_set[blog_posts_attributes][2]"
für das dritte gerenderte Feld zurückgegeben, sodass ich nur mit dem Index in dieser Zeichenfolge übereinstimme und ihn verwende.Eine kühlere (und vielleicht sauberere?) Methode besteht darin, ein Lambda zu übergeben und es zum Inkrementieren aufzurufen.
Und das in der Aussicht
quelle
Ich weiß, dass dies etwas spät ist, aber ich musste dies kürzlich tun. Sie können den Index der Felder dafür abrufen
Ich hoffe das hilft :)
quelle
Zu fields_for child_index hinzugefügt: 0
quelle
Wenn Sie die Kontrolle über die Indizes haben möchten, aktivieren Sie die
index
OptionDies wird produzieren
Wenn das Formular gesendet wird, enthalten die Parameter so etwas wie
Ich musste die Indexoption verwenden, damit meine Multi-Dropdowns funktionieren. Viel Glück.
quelle