Pregunta

Hasta donde yo sé, la forma aceptada de establecer los nombres "humanizados" de los campos en Rails 3 es usar locales:

# config/locales/en.yml
en:
  activerecord:
    attributes:
      member:
        username: 'username' # rather than 'Username'

Sin embargo, simplemente quiero que Rails 3 use versiones en minúsculas de sus nombres humanizados predeterminados.¿Existe una forma fácil e integrada de hacer esto?

Un ejemplo para ayudar a aclarar: cuando está dentro de un form_for, <%= f.label :username %> muestra "Nombre de usuario" por defecto.Quiero que muestre "nombre de usuario".

¿Fue útil?

Solución

El asistente label utiliza de forma predeterminada human_attribute_name paraconvertir un atributo en un nombre humano.Si observa la fuente, human_attribute_name intenta algunas cosas antes de volver a attributes.to_s.humanize.Primero intenta la traducción y luego busca una opción :default en el hash de opciones.

Entonces, la mejor y más simple manera de obtener la funcionalidad que desea es anular human_attribute_name con la suya propia que proporciona una opción :default y luego llama al original.Rails proporciona una forma razonable de hacer este tipo de cosas con alias_method_chain, así que ...

Ya escuché suficiente, ¡solo dame la respuesta!

Coloque lo siguiente en cualquier archivo en config/initializers y reinicie su aplicación:

module ActiveModel
  module Translation
    def human_attribute_name_with_foo attribute, options = {}
      human_attribute_name_without_foo attribute, options.merge( :default => attribute.humanize.downcase )
    end

    alias_method_chain :human_attribute_name, :foo
  end
end

Otros consejos

Tuve el mismo problema. Lo resolví a través de css:

En foo.html.erb:

<%= f.label :username, :class => "my_class" %>

En bar.css:

label.my_class {
    text-transform:   lowercase;
}

Yo también preferiría una solución diferente.Pero ese es el único que he podido encontrar hasta ahora.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top