Emili Parreño

Cómo "humanizar" los nombres de atributos en Rails

18 Feb 2009 | Rails

Desde las últimas versiones de Rails, habréis observado que en los formularios se utilizan símbolos para mostrar el nombre de los atributos, por ejemplo

<%= f.label :title_spanish %>

Esto es perfecto, te ahorra mucho trabajo, pero tiene el problema de que normalmente el nombre de los atributos no es el que realmente queremos mostrar en las vistas o no está en nuestro idioma. Por ejemplo si tenemos un atributo title_spanish la etiqueta de arriba generará este código

<label for="title_spanish">Title spanish</label>

El helper label intenta "humanizar" el nombre del atributo, pero a menudo no es el resultado que nos gustaría tener.

Hay una manera elegante y muy DRY de personalizar este comportamiento, para no tener que andar modificando todas las vistas a mano.

En el directorio initializers podemos editar el archivo inflections.rb y añadir lo siguiente

ActiveSupport::Inflector.inflections do |inflect|
  inflect.human "title_spanish", "Título en castellano"
  inflect.human "created_at", "Creado el"
  ...
end

Esto también hará que en los mensajes de error de las validaciones aparezcan los nombres de los atributos como los hayamos definido nosotros y no con su nombre real. En definitiva, en cualquier lugar donde se utilice el símbolo :title_spanish se mostará como "Título en castellano".

Podéis ver más sobre la clase Inflections en su página de la API de Rails