Je ne pense pas que ce soit un cas rare, mais lors de la création d'une zone de sélection à partir d'énumération, notez comment modifier le libellé. Comme prémisse, «énumérer» et «reformer» sont utilisés pour la gemme.
product_form.rb
extend Enumerize
enumerize :fluit, in: {
apple: 1,
orange: 2,
peach: 3,
strawberry: 4,
cherry: 5,
}, predicates: { prefix: true }
property :fluit
ja.yml
product:
fluit:
apple:pomme
orange:Orange
peach:Les pêches
strawberry:fraise
cherry:Cerise
Si vous l'écrivez normalement, c'est très bien.
new.slim
= f.select :fluit, f.object.class.fluit.options, {prompt: 'Sélectionnez un fruit'}
Cependant, supposons qu'on lui dise: «Je veux mettre les mots« (en vente spéciale) »pour« pommes »et« cerises »».
Cela dit, je ne veux pas changer ja.yml.
Ecrire un par un sans utiliser f.object.class.fluit.options
est également peu maintenable.
Par conséquent, j'ai créé une méthode qui transforme le tableau généré par f.object.class.fluit.options
avec une carte et ajoute le libellé et ne retourne que lorsqu'il s'agit d'une valeur spécifique.
product_form.rb
def fruit_select_display
self.class.fluit.options.map do |key, value|
if value == 'apple' || value == 'cherry'
[key + '(Pendant la vente spéciale)', value]
else
[key, value]
end
end
end
new.slim
= f.select :fluit, f.object.fruit_select_display, {prompt: 'Sélectionnez un fruit'}
Avec cela, j'ai pu l'utiliser une fois.