2011-12-16 17 views
7

¿Es posible establecer un nombre para mostrar para un campo de base de datos, en lugar de usar el generado automáticamente?Cómo establecer un nombre para mostrar para un campo en Rails

Tengo un campo bbe_date, y en las pantallas, estoy usando 'Best Before' como la cadena mostrada. He pasado por algunas vistas configurando esto manualmente, pero ¿hay una mejor manera?

Esto con suerte se aplicará siempre que el nombre del campo se envíe al navegador en forma legible por humanos. Estoy pensando en particular los errores de validación, así (ya que es el bit yo no haya manejado manualmente!) - mi código de validación está haciendo:

record.errors.add :bbe_date, 'not valid' 

pero a menos que especialmente intercepción esto, acabo de ver 'Bbe la fecha no es válida 'como el error de validación.

+0

¿Por qué no refactorizar el campo para que se llame 'best_before'? Solo un pensamiento. –

+0

Es una posibilidad, pero preferiría no cambiar la base de datos solo porque el cliente quiere ver un nombre diferente para el campo. Y esta no es una solución general, porque incluso el nombre original de la Fecha BBE se autogenera a la fecha Bbe - Rails no sabe que BBE es un acrónimo. – asc99c

Respuesta

13

Necesita internationalization (I18N). Sí, incluso si solo quieres inglés.

Modificar config/lugares/en.yml, y establecer:

en: 
    activerecord: 
    attributes: 
     your_lower_case_model_name: 
     bbe_date: Best Before 
+0

Cool, lo intentarás! – asc99c

+0

Disculpa por la demora en aceptar la respuesta! Acabo de volver, y funciona muy bien – asc99c

0

Una forma de no hacerlo es reemplazar el comportamiento de human_attribute_name que le da el nombre de visualización por defecto. En su modelo:

HUMANIZED_ATTRIBUTES = { 
    :bbe_date => "Best Before" 
} 

def self.human_attribute_name(attr, options={}) 
    HUMANIZED_ATTRIBUTES[attr.to_sym] || super 
end 

Tenga en cuenta que si se trata de raíles 2, tendrá que quitar el parámetro opciones de human_attribute_name.

Cuestiones relacionadas