Skip to content

Comments

Filter virtual columns from the attribute names#43263

Merged
rafaelfranca merged 3 commits intorails:mainfrom
bnjamin:filter-virtual-columns
Sep 20, 2021
Merged

Filter virtual columns from the attribute names#43263
rafaelfranca merged 3 commits intorails:mainfrom
bnjamin:filter-virtual-columns

Conversation

@bnjamin
Copy link
Contributor

@bnjamin bnjamin commented Sep 19, 2021

Summary

In a rails 7 app with config.active_record.partial_inserts = false,
If you have a model with virtual/generated columns AR tries to insert values into the columns when creating a new record.

This results in a PG::Error

Fixes #43262

Other Information

This opens up for another question:
Should VirtualColumn.create(name: "Hello", upper_name: "hello") raise or just ignore the value for upper_name

Thanks to @cristianbica for the help

@cristianbica
Copy link
Member

You could test this with

diff --git a/activerecord/test/cases/adapters/postgresql/virtual_column_test.rb b/activerecord/test/cases/adapters/postgresql/virtual_column_test.rb
index fa6dcc51a6..7634baaeb4 100644
--- a/activerecord/test/cases/adapters/postgresql/virtual_column_test.rb
+++ b/activerecord/test/cases/adapters/postgresql/virtual_column_test.rb
@@ -34,6 +34,16 @@ def test_virtual_column
       assert_equal "RAILS", VirtualColumn.take.upper_name
     end
 
+    def test_virtual_column_with_full_inserts
+      partial_inserts_was = VirtualColumn.partial_inserts
+      VirtualColumn.partial_inserts = false
+      assert_nothing_raised do
+        VirtualColumn.create!(name: "Rails")
+      end
+    ensure
+      VirtualColumn.partial_inserts = partial_inserts_was
+    end
+
     def test_stored_column
       column = VirtualColumn.columns_hash["name_length"]
       assert_predicate column, :virtual?

@bnjamin
Copy link
Contributor Author

bnjamin commented Sep 20, 2021

Done!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Error when persisting model with virtual column in PG

3 participants