2012-09-13 19 views
9

Ruby on Rails usa convenciones en singular y plural para los nombres de modelo, vista y controlador. Esto es muy bueno, ya que uno podría tener un modelo llamado user y un controlador llamado users. Esto funciona con casi cada palabra, como usuario (s), árbol (s), libro (s), por lo que cada palabra que simplemente tiene una s para formar el plural.¿El plural inteligente siempre inteligente?

Sin embargo, ¿qué pasa con las palabras que no solo necesitan una s para formar el plural, como las palabras que terminan con la letra "y"? Por ejemplo, ciudad y ciudades? ¿Los rieles saben la diferencia o tendré que escribir city y citys, a pesar de que es gramaticalmente incorrecta?

Respuesta

17

Rails conoce muchos plurales. Se puede manejar "ciudad", por ejemplo:

1.9.2p318 :001 > "city".pluralize 
=> "cities" 
1.9.2p318 :002 > "cities".singular 
=> "city" 

Sin embargo, es posible que los plurales que no conoce, y no será el aprendizaje. Consulte la documentación de ActiveSupport::Inflector

El equipo central Carriles ha declarado parches para la biblioteca inflexiones no serán aceptados con el fin de evitar las aplicaciones heredadas romper que puede estar confiando en inflexiones errantes. Si descubre una inflexión incorrecta y la requiere para su aplicación, necesitará para corregirla usted mismo (se explica a continuación).

¿Cómo lo corrige usted? En config/initializers/inflections.rb. Por ejemplo:

ActiveSupport::Inflector.inflections do |inflect| 
    inflect.plural /^(.*)(l)ens$/i, '\1\2enses' 
end 

Véase de nuevo la documentación para ActiveSupport::Inflector Para más información sobre cómo enseñar a los carriles nuevos inflexiones.

+0

¡Eso lo explica muy bien! ¡Gracias! – weltschmerz

1

Para muchos de los más comunes, sabe cómo manejarlo bastante bien. Se puede ensayar lo siguiente en el IRB de la siguiente manera:

require 'active_support/all' 
ActiveSupport::Inflector.pluralize("city") 

Y vas a volver una cadena con las "ciudades" de valor. También puede agregar y ajustar inflexiones siguiendo los pasos enumerados en config/initializers/inflections.rb

Cuestiones relacionadas