2010-03-06 11 views
8

Tengo una forma dinámica que tiene un conjunto de valores. Creé un parcial que contiene campos de texto que mostrar. Al lado de cada uno de ellos, me gustaría mostrar una etiqueta que contenga el título del texto. Por ejemplo, Nombre y Apellido no se conocen previamente. ¿Cómo hago eso? Parece que no puedo acceder a los atributos directamente. Pero cuando uso el campo de etiqueta, el nombre de la variable en la etiqueta no se muestra en el valor real.Fields_for dynamic label

+0

¿Podría tratar de explicar lo que quiere lograr mejor? Quizás dar un ejemplo? Intenté entender para poder ayudarlo, pero no puedo entender lo que necesita. – Petros

+0

Tengo un objeto que tiene una relación de uno a varios con un conjunto de campos dinámicos {Nombre, Valor}. Cuando un usuario está actualizando los campos dinámicos, quiero mostrar el nombre de los campos como la etiqueta real en lugar de la etiqueta codificada. O un valor de cadena predeterminado. La forma dinámica está dentro de un parcial y todos los datos. Fragmentos: _form.erb <% f.fields_for: entity_values ​​do | builder | %> <% = render "entity_value_fields",: f => builder%> <% end% _entity_value_fields.erb <% = f.label: name%> {etiqueta debe ser el nombre dinámico de ese valor} <% = f.text_field: value%> ... – sebajb

Respuesta

6

¡Bueno! Esto fue un reflejo de lo nuevo que soy para criticar. Puedes hacer esto usando f.object.{attr_name} y eso funcionó.

+0

¿Cómo se usa esto? ¿Cuál sería el objeto en tu ejemplo? –

5

f.object.{attr_name} no funcionó para mí, pero f.object[:attr_name] hizo.

+1

'f.object.first_name' o' attr_name = 'first_name'; f.object.send (attr_name) 'funcionará. 'f.object. {attr_name}' no es la sintaxis de Ruby. – Kris

2

¿Qué hay de:

f.object.send(attr_name) 

Esa sería la forma Rubyish.

+0

¿Puedes explicar esto mejor? –

+2

Todos los constructores de formularios tienen un método llamado 'objeto' que devuelve el objeto que está envolviendo el formulario, generalmente un modelo de ActiveRecord, por ejemplo, persona. Luego llamamos a 'enviar' a esa persona para enviarle un mensaje, por lo que' person.send (: name) 'es lo mismo que' person.name'. Como puede ver usando 'enviar', no es necesario codificar el atributo (por ejemplo, apellido) que queremos mostrar como nuestra etiqueta. Entonces, en el caso anterior, 'attr_name' puede ser cualquier cadena, ya sea last_name, first_name, whatever. – Kris