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