ruby-on-rails helpers pluralize singular

Prueba si una palabra es singular o plural en Ruby on Rails



ruby-on-rails helpers (3)

Bien en los rieles, puede hacer una string#singularize|#pluralize comparación para devolver un valor verdadero o falso.

Pero creo que, debido a la naturaleza del lenguaje en sí, esto podría necesitar una copia de seguridad para que sea completamente precisa.

Podrías hacer algo como esto

def test_singularity(str) str.pluralize != str && str.singularize == str end

Pero para ver qué tan preciso, corrí un conjunto rápido de palabras.

%w(word words rail rails dress dresses).each do |v| puts "#{v} : #{test_singularity(v)}" end word : true words : false rail : true rails : false dress : false dresses : false

Me sorprendió un poco en realidad, ya que el ''vestido'' se pluraliza correctamente, pero cuando pasa por la #singularización se convierte en un pequeño obstáculo.

''dress''.pluralize # => dresses ''dress''.singularize # => dres

Pregunta rápida.

¿Cómo puedo probar una palabra para ver si es singular o plural?

Realmente me gustaría:

test_singularity(''word'') # => true test_singularity(''words'') # => false

¡Apuesto a que Rails es capaz!

Gracias.


La mayoría de las veces nunca pruebo singularidad o plural, simplemente lo convierto a la forma singular o plural que requiero.

En Rails 2.3.x esto fue posible, escribiendo algo como esto

plural_form = org_word.singularize.pluralize singular_form = org_word.pluralize.singularize

Continuando con esto, una función de trabajo es fácil de suministrar:

require ''active_support'' def is_singular?(str) str.pluralize.singularize == str end %w(word words rail rails dress dresses).each do |v| puts "#{v} : #{is_singular?(v)}" end

que da la siguiente salida:

word : true words : false rail : true rails : false dress : true dresses : false

En Rails 4 , con las palabras dadas, ahora es mucho más fácil. Solo puedes hacer

plural_form = org_word.pluralize singular_form = org_word.singularize

y así la función se vuelve mucho más fácil también:

require ''active_support'' def is_singular?(str) str.singularize == str end


Ni el rubí ni los rieles vienen con un método específico para probar la "pluralidad" de las palabras.

Como dijo nowk, lo más que puede hacer es implementarlas usted mismo, comparando con word.pluralize y word.singularize . Esto le dará una forma de prueba rápida, barata y, en general, buena. Aunque fallará algunas veces.

Si necesita más precisión, deberá usar la gema de Ruby Linguistics , que puede manejar el vestido y los vestidos correctamente (pero es más pesado).