17-01-2013, 10:59 PM
(Modification du message : 17-01-2013, 11:00 PM par Sephi-Chan.)
(17-01-2013, 10:19 PM)Holy a écrit : Ok, ça me semble plus logique. Juste une chose, j'utilise ce tableau également pour créer un champ select dans ma vue. Avec simple_form, j'utilise l'option :collection pour renseigner mon tableau.
Du coup je sais pas trop comment faire pour renseigner un tableau complet ^^ J'ai trouvé une solution, mais j'suis pas sûr que ça soit top ^^
= h.input :nation, :collection => t('nations').map {|k, v| [v, k]}
Je ne comprends pas trop pourquoi fais un
map
sur ce qui semble être une chaîne ( t('nations')
).
= h.input :nation, collection: Nation::NAMES.map { |name| [ name, t([ 'nations', name ]) }
Ainsi, le
map
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'attribut value
), mais l'idée y est.(17-01-2013, 10:19 PM)Holy a écrit : Autre chose, j'aimerais mettre en place une fonction ajax qui change le contenu d'un select en fonction de ce champ (les races diffèrent selon le choix de la race). Pour ça, ça devrait aller, mais je ne sais pas trop comment faire en sorte que la validation de mon champ prenne en compte cette condition ^^
Tu peux faire quelque chose comme :
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