From 36b167c440645ef3729c5f14989d6fc3c6e64894 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 26 Aug 2024 09:05:44 +1000 Subject: [PATCH] Make Action Text `store_if_blank` work for `presence` validation Makes this work: https://github.com/rails/rails/pull/52573/files#r1730329576 --- actiontext/lib/action_text/attribute.rb | 5 ++++- ...message_without_blanks_with_content_validation.rb | 3 +++ actiontext/test/unit/model_test.rb | 12 ++++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 actiontext/test/dummy/app/models/message_without_blanks_with_content_validation.rb diff --git a/actiontext/lib/action_text/attribute.rb b/actiontext/lib/action_text/attribute.rb index a8a0146de30f5..4f4d2e6e2ce4e 100644 --- a/actiontext/lib/action_text/attribute.rb +++ b/actiontext/lib/action_text/attribute.rb @@ -73,7 +73,10 @@ def #{name}=(body) if body.present? self.#{name}.body = body else - self.#{name}.mark_for_destruction if #{name}? + if #{name}? + self.#{name}.body = body + self.#{name}.mark_for_destruction + end end end CODE diff --git a/actiontext/test/dummy/app/models/message_without_blanks_with_content_validation.rb b/actiontext/test/dummy/app/models/message_without_blanks_with_content_validation.rb new file mode 100644 index 0000000000000..daf266bbedce9 --- /dev/null +++ b/actiontext/test/dummy/app/models/message_without_blanks_with_content_validation.rb @@ -0,0 +1,3 @@ +class MessageWithoutBlanksWithContentValidation < MessageWithoutBlanks + validates :content, presence: true +end diff --git a/actiontext/test/unit/model_test.rb b/actiontext/test/unit/model_test.rb index a0454ac2dd13c..426d1176f13b9 100644 --- a/actiontext/test/unit/model_test.rb +++ b/actiontext/test/unit/model_test.rb @@ -152,4 +152,16 @@ class ActionText::ModelTest < ActiveSupport::TestCase message.update(content: "") end end + + test "if disallowing blanks, can still validate presence" do + message1 = MessageWithoutBlanksWithContentValidation.new(subject: "Greetings", content: "") + assert_not_predicate message1, :valid? + message1.content = "content" + assert_predicate message1, :valid? + + message2 = MessageWithoutBlanksWithContentValidation.new(subject: "Greetings", content: "content") + assert_predicate message2, :valid? + message2.content = "" + assert_not_predicate message2, :valid? + end end