Existe-t-il une méthode (ou un moyen d'obtenir des fonctionnalités similaires) pour faire un fields_for_with_index
?
Exemple:
<% f.fields_for_with_index :questions do |builder, index| %>
<%= render 'some_form', :f => builder, :i => index %>
<% end %>
Ce partiel rendu a besoin de savoir quel est l'index actuel dans la fields_for
boucle.
ruby-on-rails
loops
fields-for
Shpigford
la source
la source
Réponses:
Ce serait en fait une meilleure approche, en suivant de plus près la documentation de Rails:
De: http://railsapi.com/doc/rails-v3.0.4/classes/ActionView/Helpers/FormHelper.html#M006456
la source
La réponse est assez simple car la solution est fournie dans Rails. Vous pouvez utiliser des
f.options
paramètres. Donc, à l'intérieur de votre rendu_some_form.html.erb
,L'index est accessible par:
Vous n'avez rien d'autre à faire.
Mise à jour: Il semble que ma réponse n'était pas assez claire ...
Fichier HTML d'origine:
Sous-formulaire rendu:
la source
<%= f.options[:child_index] %>
votre sous-formulaire rendu (dans ce cas: _some_form.html.erb), pas dans l'originalbuilder
. Réponse mise à jour pour plus de précisions.nil
pour çaDepuis Rails 4.0.2, un index est désormais inclus dans l'objet FormBuilder:
https://api.rubyonrails.org/classes/ActionView/Helpers/FormBuilder.html#method-i-fields_for
Par exemple:
la source
project_fields.options[:child_index]
. Alors j'aime mieux cette façon!Pour Rails 4+
Support de Monkey Patch pour Rails 3
Pour vous mettre
f.index
au travail dans Rails 3, vous devez ajouter un patch monkey aux initialiseurs de vos projets pour ajouter cette fonctionnalité àfields_for
la source
.index
est beaucoup plus propre.Checkout Rendu d'une collection de partiels . Si votre exigence est qu'un modèle doit itérer sur un tableau et rendre un sous-modèle pour chacun des éléments.
Cela rendra «_children.erb» et passera la variable locale «children» au modèle pour affichage. Un compteur d'itérations sera automatiquement mis à disposition du modèle avec un nom de formulaire
partial_name_counter
. Dans le cas de l'exemple ci-dessus, le modèle serait alimentéchildren_counter
.J'espère que cela t'aides.
la source
question_comment_form
étant mon nom partiel ...Je ne vois pas de moyen décent de le faire à travers les moyens fournis par Rails, du moins pas dans -v3.2.14
@Sheharyar Naseer fait référence aux options de hachage qui peuvent être utilisées pour résoudre le problème, mais pas aussi loin que je puisse voir dans la manière qu'il semble suggérer.
J'ai fait ça =>
ou
Dans mon cas,
g.object_name
renvoie une chaîne comme celle-ci"gallery_set[blog_posts_attributes][2]"
pour le troisième champ rendu afin que je fasse simplement correspondre l'index de cette chaîne et l'utilise.En fait, une façon plus fraîche (et peut-être plus propre?) De le faire est de passer un lambda et de l'appeler à incrémenter.
Et le dans la vue
la source
Je sais que c'est un peu tard mais j'ai récemment dû le faire vous pouvez obtenir l'index des champs_pour comme ça
J'espère que ca aide :)
la source
Ajouté à fields_for child_index: 0
la source
Si vous souhaitez contrôler les index, cochez l'
index
optionCela produira
Si le formulaire est soumis, les paramètres incluront quelque chose comme
J'ai dû utiliser l'option d'index pour faire fonctionner mes menus déroulants multiples. Bonne chance.
la source