2009-10-30 4 views
3

c'est le problème:rails MonthNames to_s

dans une lib i besoin d'imprimer MonthNames à chaîne

si je tente

Date::MONTHNAMES.inspect 

résultat est

=> « [néant , "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", \ "Septembre", "Octobre", "Novembre", "Décembre" "

qui est bon, mais je ne ai pas besoin le premier élément, donc

month_names = Date::MONTHNAMES 
month_names.shift 
month_names.inspect 

mais

ActionView::TemplateError (can't modify frozen array) 

il y a une solution de contournement? grâce

Répondre

6
Date::MONTHNAMES.slice(1,12).inspect 

vous donne tous les mois (sans le nil).

+1

':: Date de MONTHNAMES.compact' est mieux –

2

Comme le montre le message d'erreur Date::MONTHNAMES est un objet figé de sorte que vous ne pouvez pas le modifier (shift va le modifier en déplaçant le premier élément). Vous pouvez obtenir ce que vous voulez par:

puts Date::MONTHNAMES[1..-1].inspect

1

Bien que la tranche/solution d'indexation de tableau est probablement mieux ici, vous pouvez toujours dup un tableau congelé et le travail sur la copie:

month_names = Date::MONTHNAMES.dup 
month_names.shift 
month_names.inspect 

devrait vous donner ce que vous voulez.

9

... vous donne également tout le mois (sans le premier néant).

Date::MONTHNAMES.compact 
-1

Date::MONTHNAMES.reject{|m| m.nil?}

Questions connexes