Notez que je voulais traiter le message de validation après qu'il ait été généré selon le modèle d'entrée du formulaire en raison de circonstances malheureuses. Par exemple, supposons que vous ayez le formulaire suivant.
new.slim
= form_for post_form, url: confirm_post_path do |f|
- if post_form.errors.present?
ul
- post_form.errors.full_messages.each do |msg|
li = msg
Cependant, supposons que vous ayez ajouté l'exigence de modifier le message de validation si vous choisissez une option particulière dans le formulaire. Dans ce cas, errors.full_messages est un tableau, j'ai donc vérifié le contenu un par un avec Decorator et l'ai remplacé par la force brute.
new.slim
= form_for post_form, url: confirm_post_path do |f|
- post_form_decorator = ::PostFormDecorator.new(f.object)
- if post_form.errors.present?
ul
- post_form_decorator.post_error_display(post_form.errors.full_messages).each do |msg|
li = msg
post_form_decorator.rb
class PostFormDecorator
delegate_missing_to :@post_form
def initialize(post_form)
@post_form = post_form
end
def post_error_display(error_full_messages)
error_full_messages.each do |msg|
if @post_form.category == 'music'
msg.gsub!(/#{@post_form.model.class.human_attribute_name(:author)}/, 'chanteur')
end
end
end
end
Notez que le contenu est remplacé par une méthode destructive, il ne sera donc pas remplacé par gsub sauf si vous ajoutez un "!".
Recommended Posts