variable ruby-on-rails ruby ruby-on-rails-3 helpers

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 ...



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



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.