¿Existe algún método (o forma de lograr una funcionalidad similar) para hacer una fields_for_with_index
?
Ejemplo:
<% f.fields_for_with_index :questions do |builder, index| %>
<%= render 'some_form', :f => builder, :i => index %>
<% end %>
Ese renderizado parcial necesita saber cuál es el índice actual en el fields_for
ciclo.
ruby-on-rails
loops
fields-for
Shpigford
fuente
fuente
Respuestas:
En realidad, este sería un mejor enfoque, siguiendo más de cerca la documentación de Rails:
De: http://railsapi.com/doc/rails-v3.0.4/classes/ActionView/Helpers/FormHelper.html#M006456
fuente
La respuesta es bastante simple ya que la solución se proporciona dentro de Rails. Puede utilizar
f.options
params. Entonces, dentro de tu renderizado_some_form.html.erb
,Se puede acceder al índice mediante:
No necesitas hacer nada más.
Actualización: Parece que mi respuesta no fue lo suficientemente clara ...
Archivo HTML original:
Subformulario renderizado:
fuente
<%= f.options[:child_index] %>
en su subformulario renderizado (en este caso: _some_form.html.erb), no en el originalbuilder
. Respuesta actualizada para mayor aclaración.nil
por esoA partir de Rails 4.0.2, ahora se incluye un índice en el objeto FormBuilder:
https://api.rubyonrails.org/classes/ActionView/Helpers/FormBuilder.html#method-i-fields_for
Por ejemplo:
fuente
project_fields.options[:child_index]
. ¡Así que me gusta más de esta manera!Para rieles 4+
Soporte de Monkey Patch para Rails 3
Para empezar
f.index
a trabajar en Rails 3, debe agregar un parche de mono a los inicializadores de sus proyectos para agregar esta funcionalidad afields_for
fuente
.index
es mucho más limpio.Realizar pedido Representación de una colección de parciales . Si su requisito es que una plantilla necesita iterar sobre una matriz y representar una subplantilla para cada uno de los elementos.
Esto representará “_children.erb” y pasará la variable local 'niños' a la plantilla para su visualización. Se pondrá automáticamente a disposición de la plantilla un contador de iteraciones con un nombre del formulario
partial_name_counter
. En el caso del ejemplo anterior, se alimentaría la plantillachildren_counter
.Espero que esto ayude.
fuente
question_comment_form
siendo mi nombre parcial ...No veo una forma decente de hacer esto a través de las formas proporcionadas por Rails, al menos no en -v3.2.14
@Sheharyar Naseer hace referencia a las opciones hash que se pueden usar para resolver el problema, pero no tanto como puedo ver en la forma en que parece sugerir.
Hice esto =>
o
En mi caso,
g.object_name
devuelve una cadena como esta"gallery_set[blog_posts_attributes][2]"
para el tercer campo renderizado, así que simplemente hago coincidir el índice en esa cadena y lo uso.En realidad, una forma más fresca (¿y tal vez más limpia?) De hacerlo es pasar un lambda y llamarlo para incrementar.
Y en la vista
fuente
Sé que esto es un poco tarde, pero recientemente tuve que hacer esto, puedes obtener el índice de los campos_para esto
Espero que esto ayude :)
fuente
Agregado a fields_for child_index: 0
fuente
Si desea tener control sobre los índices, consulte la
index
opciónEsto producirá
Si se envía el formulario, los parámetros incluirán algo como
Tuve que usar la opción de índice para que mis menús desplegables múltiples funcionaran. Buena suerte.
fuente