Ich denke nicht, dass dies ein seltener Fall ist, aber notieren Sie sich beim Erstellen eines Auswahlfelds aus enum, wie Sie den Wortlaut ändern können. Als Prämisse verwenden wir "Aufzählung" und "Reform" für das Juwel.
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:Apfel
orange:Orange
peach:Pfirsiche
strawberry:Erdbeere
cherry:Kirsche
Wenn Sie es normal schreiben, ist dies in Ordnung.
new.slim
= f.select :fluit, f.object.class.fluit.options, {prompt: 'Obst auswählen'}
Nehmen wir jedoch an, ihm wurde gesagt: "Ich möchte die Wörter" (im Sonderverkauf) "für" Äpfel "und" Kirschen "setzen." Das heißt, ich möchte ja.yml nicht ändern. Das Schreiben nacheinander ohne Verwendung von "f.object.class.fluit.options" ist ebenfalls schlecht wartbar.
Daher habe ich eine Methode erstellt, die das von f.object.class.fluit.options
generierte Array mit einer Map umdreht und den Wortlaut hinzufügt und nur zurückgibt, wenn es sich um einen bestimmten Wert handelt.
product_form.rb
def fruit_select_display
self.class.fluit.options.map do |key, value|
if value == 'apple' || value == 'cherry'
[key + '(Während des Sonderverkaufs)', value]
else
[key, value]
end
end
end
new.slim
= f.select :fluit, f.object.fruit_select_display, {prompt: 'Obst auswählen'}
Damit konnte ich es einmal benutzen.
Recommended Posts