ruby on rails - solo - ¿Cómo obtengo el atributo ''nombre'' HTML que generará un generador de formularios de rieles para un determinado campo?
validar solo letras en html5 (4)
Cuando tienes un campo de formulario como este:
<%= f.text_field :last_name %>
generará esto en HTML:
<input id="person_last_name" name="person[last_name]" size="30" type="text" />
Me gustaría saber si hay alguna forma de obtener el atributo de nombre (en este caso, "persona [apellido_último]") que se generará.
Parece un poco extraño querer obtener pero tengo mis razones! Tampoco me molesta lanzarme a una larga explicación también.
Bueno, como era de esperar, el comentario que tienes es bastante cierto :)
El lugar en el origen donde sucede esto es la clase InstanceTag
a la que se aplica toda la generación de etiquetas. El método se llama tag_name .
Después de inspeccionar el objeto de formulario, descubrí que puedes obtener el object_name
de él.
Así que esto funcionó bien para mí: "#{f.object_name}[field_name]"
Que generará: object[object_attributes][0][field_name]
La respuesta de Neutrino es genial. Solo quiero agregar lo que encontré, puede que no sea exactamente lo correcto. Pero funcionó para mí.
Encuentre el método siguiente en action_view / helpers / form_tag_helper.rb
def sanitized_object_name
@sanitized_object_name ||= @object_name.gsub(//]/[|[^-a-zA-Z0-9:.]/, "_").sub(/_$/, "")
end
Espero eso ayude.
ActionView::Helpers::InstanceTag.new(
ActiveModel::Naming.param_key(@object_in_form_for),
:your_attribute,
:this_param_is_ignored
).send(:tag_name)
También existe el atributo tag_name_with_index
que acepta el índice como primer parámetro. Además, tanto tag_name
como tag_name_with_index
tienen el parámetro opcional multiple = false
, que se utiliza para las matrices (simplemente agrega []
al final del nombre generado).
Finalmente, hay métodos similares si necesita id en lugar de name - tag_id
y tag_id_with_index
respectivamente.