(17-01-2013, 10:59 PM)Sephi-Chan a écrit :En fait, mon(17-01-2013, 10:19 PM)Holy a écrit :
= h.input :nation, :collection => t('nations').map {|k, v| [v, k]}
Je ne comprends pas trop pourquoi fais unmap
sur ce qui semble être une chaîne (t('nations')
).
= h.input :nation, collection: Nation::NAMES.map { |name| [ name, t([ 'nations', name ]) }
Ainsi, lemap
te donnera un tableau de tableaux. Tu devras peut-être inverser les 2 éléments du tableau (l'un sert de libellé, l'autre d'attributvalue
), mais l'idée y est.
t('nations')
renvoie à un tableau et non une chaine. Voilà l'extrait à quoi correspond cette traduction : nations:
klum: Empire Mécanique de Klüm
garn: Horde d'Al Garn
ulysk: Nation Marchande d'Ulysk
ludwynn: Royaume Académique de Ludwynn
Je fais la même chose que toi en utilisant directement le fichier d'internationalisation plutôt que ma classe Nation en fait. Ma solution est moins logique surtout si je décide de changer la façon dont je récupère mes noms plus tard (depuis une bdd).(17-01-2013, 10:59 PM)Sephi-Chan a écrit : Tu peux faire quelque chose comme :La fonction anonyme renvoie un objet. Mais elle l'hérite d'où ? ^^
class Race
NAMES = { 'klum' => %w( dwarf human ), 'ulysk' => %w( elf dwarf human ) }
end
class Hero < ActiveRecord::Base
validates :nation, presence: true, inclusion: { in: Nation::NAMES }
validates :race, presence: true, inclusion: { in: lambda { |hero| Race::NAMES[hero.race] } }
end