From f038bf82cb0edd83e2c7fc4461836376dea74e11 Mon Sep 17 00:00:00 2001 From: Alexander Podgorbunskiy Date: Wed, 24 Aug 2022 22:47:08 +0400 Subject: [PATCH 1/2] Fix represneted attribtues' errors moving --- lib/active_data/model/representation.rb | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/lib/active_data/model/representation.rb b/lib/active_data/model/representation.rb index 974f020..c463866 100644 --- a/lib/active_data/model/representation.rb +++ b/lib/active_data/model/representation.rb @@ -74,12 +74,8 @@ def emerge_represented_attributes_errors! if ActiveModel.version >= Gem::Version.new('6.1.0') def move_errors(from, to) - errors.each do |error| - next unless error.attribute == from - - errors.add(to, error.type, message: error.message) - errors.delete(error.attribute, error.type) - end + errors.where(from).each { |error| errors.add(to, error.type, **error.options) } + errors.delete(from) end else # up to 6.0.x def move_errors(from, to) From 4a0f5e32cf3395f3ea4786003a22b2bb443002e3 Mon Sep 17 00:00:00 2001 From: Alexander Podgorbunskiy Date: Fri, 26 Aug 2022 14:09:30 +0400 Subject: [PATCH 2/2] Copy error from represented attribute, if not given explicitly, and html_safe it --- lib/active_data/model/representation.rb | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/active_data/model/representation.rb b/lib/active_data/model/representation.rb index c463866..f7cc681 100644 --- a/lib/active_data/model/representation.rb +++ b/lib/active_data/model/representation.rb @@ -74,7 +74,14 @@ def emerge_represented_attributes_errors! if ActiveModel.version >= Gem::Version.new('6.1.0') def move_errors(from, to) - errors.where(from).each { |error| errors.add(to, error.type, **error.options) } + errors.where(from).each do |error| + options = error.options + # If we generate message for built-in validation, we don't want to later escape it in our monkey-patch + options = options.merge(message: error.message.html_safe) unless options.key?(:message) + + errors.add(to, error.type, **options) + end + errors.delete(from) end else # up to 6.0.x