2009-11-26 17 views

Respuesta

18

Bien en rieles, puede hacer una comparación string#singularize|#pluralize 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 ser completamente preciso.

que podría hacer algo como esto

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

Pero para ver cómo es exacto, me encontré con una configuración rápida de las 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 'vestido' pone pluralizado correctamente, pero cuando se pasa por el #singularize que se ejecuta en un poco de un inconveniente.

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

El problema "dress" .singularize se resuelve aquí: https: //rails.lighthouseapp.com/projects/8994/tickets/2399-incorrect-inflectors-for-business-or-ness # ticket-2399-5 – kikito

9

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

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

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

Trabajar más allá de esto, una función de trabajo es fácil 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 

la que dicta 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. Usted sólo puede hacer

plural_form = org_word.pluralize 
singular_form = org_word.singularize 

y por lo tanto la función se vuelve mucho más fácil así:

require 'active_support' 

def is_singular?(str) 
    str.singularize == str 
end 
+0

El problema del "vestido" .singularize se resuelve aquí: https://rails.lighthouseapp.com/projects/8994/tickets/2399-incorrect-inflectors-for-business-or-ness # ticket-2399-5 – kikito

+0

Los informantes se aseguran de que se pueda definir el plural o el singular para los casos difíciles. Por ejemplo: para la válvula es necesario. ¿Pero la mayoría de las veces solo quieres singularizar y pluralizar modelos? Por lo tanto, esos casos ya se corregirán (o sus rutas se estropearán). Pero mi rutina devolvió la respuesta correcta para vestimenta/vestidos. – nathanvda

+0

¿Por qué lanzas al plural primero? – Simon

0

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

Como Nowk dijo, lo máximo que puede hacer es implementarlos usted mismo, comparando con word.pluralize y word.singularize. Esto le dará una forma de prueba rápida, barata y generalmente buena. Sin embargo, fallará algunas veces.

Si necesita más precisión, necesitará usar el Ruby Linguistics gem, que puede tratar el vestido y los vestidos correctamente (pero es más pesado).

+0

en realidad, el material de singularización no está incluido por defecto en los rieles, pero se puede resolver a través de un inflector. Ver mis comentarios en otras publicaciones. – kikito

Cuestiones relacionadas