Beachten Sie, dass ich die Validierungsnachricht aufgrund einiger unglücklicher Umstände verarbeiten wollte, nachdem sie gemäß dem Eingabemuster des Formulars generiert wurde. Angenommen, Sie haben das folgende Formular.
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
Angenommen, Sie haben die Anforderung zum Ändern der Validierungsnachricht hinzugefügt, wenn Sie eine bestimmte Option im Formular auswählen. In diesem Fall ist Errors.full_messages ein Array, daher habe ich den Inhalt einzeln mit Decorator überprüft und durch Brute Force ersetzt.
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)}/, 'Sänger')
end
end
end
end
Beachten Sie, dass der Inhalt durch eine destruktive Methode ersetzt wird, sodass er nur durch gsub ersetzt wird, wenn Sie ein "!" Hinzufügen.
Recommended Posts