ruby-on-rails - variable - ruby constants
Rails artÃculo ayudante-"a" o "an" (6)
¿Alguien sabe de un Rails Helper que puede anteponer automáticamente el artículo apropiado a una cadena dada? Por ejemplo, si paso en "manzana" a la función resultaría "una manzana", mientras que si enviara "plátano" devolvería "una banana"
Ya revisé el módulo Rails TextHelper pero no pude encontrar nada. Disculpas si se trata de un duplicado, pero es sin duda una respuesta difícil de buscar ...
Ahora hay una joya para esto: indefinite_article .
Amo la indefinite_article si quieres una solución completa. Pero si solo quiere que las pruebas lean más, es útil que la cadena de parche mono siga el patrón de inflector estándar de Rails:
class String
def articleize
%w(a e i o u).include?(self[0].downcase) ? "an #{self}" : "a #{self}"
end
end
Mira en http://deveiate.org/projects/Linguistics/wiki/English - proporciona manejo de artículos indefinidos y mucho más. Lo he usado con éxito en muchos proyectos.
Ninguno que yo sepa, pero parece lo suficientemente simple como para escribir un ayudante para este derecho? La parte superior de mi cabeza
def indefinite_articlerize(params_word)
%w(a e i o u).include?(params_word[0].downcase) ? "an #{params_word}" : "a #{params_word}"
end
Espero que ayude
edición 1: También encontré este hilo con un parche que podría ayudarte a evitar esto más https://rails.lighthouseapp.com/projects/8994/tickets/2566-add-aan-inflector-indefinitize
Parece que comprobar que la primera letra es una vocal te llevaría la mayor parte del camino hasta allí, pero hay casos límite:
- Algunas personas dirán "un momento histórico" pero escribirán "un momento histórico".
- ¡Pero, es "una historia"!
- Las siglas y abreviaturas son problemáticas ("un reportero de NBC" pero "una autoridad de la OTAN")
- Palabras que comienzan con una vocal pero pronunciadas con una consonante inicial ("una unión")
- ¿Otros?
( source )
Sé que la siguiente respuesta es demasiado para una implementación práctica simple, pero en caso de que alguien quiera hacerlo con precisión bajo una escala de implementación.
La regla es en realidad bastante simple, pero el problema es que la regla depende de la pronunciación, no de la ortografía:
Si el sonido inicial es un sonido vocálico (no necesariamente una letra vocálica), anteponga ''an'', de lo contrario anteponga ''a''.
En referencia a los ejemplos de Juan:
''una hora'' porque la ''h'' aquí es un sonido vocálico, mientras que ''un histórico'' porque la ''h'' aquí es un sonido consonante. ''una NBC'' porque la ''N'' aquí se lee como ''en'', mientras que ''una OTAN'' porque la ''N'' aquí se lee como ''n''.
Entonces la pregunta se reduce a descubrir: "cuando se pronuncian ciertas letras como sonidos de vocales". Para hacer eso, de alguna manera necesita acceder a un diccionario que tiene representaciones fonológicas para cada palabra y verificar su fonema inicial.