2011-03-29 10 views
8

Estoy definiendo algunos registros activos con acrónimos. RvPark (parque de vehículos recreativos). Cuando titulo el nombre de la clase, obtengo 'Rv Park'. Realmente debería ser 'RV Park'. ¿Existe una forma correcta de hacer esto? Como este modelo comparte código con otros modelos, necesito crear una solución genérica, pero no he podido encontrar una.Usar titleize para el acrónimo en Rails

Vi una discusión sobre esto, pero no había una solución que funcionara para mí. cualquier idea es apreciada

https://rails.lighthouseapp.com/projects/8994/tickets/2944-titleize-doesnt-take-all-uppercase-words-into-account

Respuesta

4

ACTUALIZACIÓN: Acrónimo apoyo was added to the Rails Inflector después he publicado esto. Vea la respuesta de @ Anson para Rails 3.2 y posteriores.


Esto parece un caso de vanguardia que titleize no fue diseñado. El problema es que la llamada capitalize dentro siempre convertirá RV en Rv.

Crearía una función de nombre genérico para los modelos que llaman al self.class.titleize internamente y luego lo sobrecargaría en el modelo RVPark.

+0

Gracias, eso es lo que terminé haciendo y funciona muy bien. –

+2

Aquí hay una 'titleize' más robusta: https://github.com/granth/titleize –

+0

@GabeKopley ¿Cómo funcionará github.com/granth/titleize gem para el escenario de la pregunta? Parece que está funcionando como titleize normal – RAJ

13

Puede hacerlo configurando ActiveSupport::Inflector, que proporciona el método titleize. Simplemente defina su propio inflections en un inicializador.

# config/initializers/inflections.rb 
ActiveSupport::Inflector.inflections do |inflect| 
    inflect.acronym 'RV' 
end 

Reinicia tu aplicación para recoger el cambio. Ahora titleize sabe cómo manejar "RV". El fuego de una consola de rieles para comprobarlo:

> "RvPark".titleize 
=> "RV Park" 
> "rv".titleize 
=> "RV" 

Consulte los documentos relacionados para más cosas interesantes que puede hacer con inflexiones.

Cuestiones relacionadas