2012-09-13 13 views
9

Ruby on rails utilizza convenzioni singolari e plurali per i nomi dei modelli, delle viste e dei controller. Questo è molto buono, dal momento che uno potrebbe avere un modello chiamato user e un controller chiamato users. Questo funziona con quasi ogni parola, come utente (s), albero (s), libri (s), quindi ogni parola che ha solo una s per formare il plurale.Il plurale intelligente è sempre intelligente?

Tuttavia, che dire parole che non solo hanno bisogno di una s per formare il plurale, come ad esempio le parole che terminano con la lettera "y"? Ad esempio, città e città? Does rotaie conoscono la differenza o avrei bisogno di scrivere city e citys, anche se è grammaticalmente sbagliato?

risposta

17

Rails conosce un sacco di plurali. E 'in grado di gestire "città", per esempio:

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

Tuttavia, si possono trovare plurali che non conosce, e non sarà l'apprendimento. Vedere la documentazione per ActiveSupport::Inflector

Il core team Rails ha dichiarato patch per la libreria inflessioni non verranno accettati al fine di evitare la rottura delle applicazioni legacy che possono essere basandosi su inflessioni erranti. Se si scopre un inflessione corretta e richiedono per la vostra applicazione, è necessario correggere da soli (spiegato di seguito).

Come si corregge da solo? In config/initializers/inflections.rb. Per esempio:

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

rivedere la documentazione per ActiveSupport::Inflector per maggiori informazioni su come insegnare le rotaie nuove inflessioni.

+0

che spiega molto bene! Grazie! – weltschmerz

1

Per un sacco di quelli comuni, si sa come gestirlo abbastanza bene. Potete provare voi stessi nel IRB effettuando le seguenti operazioni:

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

e si otterrà indietro una stringa con il valore "città". È inoltre possibile aggiungere e regolare inflessioni seguendo i passaggi elencati in config/initializers/inflections.rb

Problemi correlati