mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #43263 from bnjamin/filter-virtual-columns
Filter virtual columns from the attribute names
This commit is contained in:
commit
6d3aedbbf2
3 changed files with 20 additions and 4 deletions
|
@ -387,20 +387,22 @@ module ActiveRecord
|
|||
attribute_names.index_with { |name| @attributes[name] }
|
||||
end
|
||||
|
||||
# Filters the primary keys and readonly attributes from the attribute names.
|
||||
# Filters the primary keys, readonly attributes and virtual columns from the attribute names.
|
||||
def attributes_for_update(attribute_names)
|
||||
attribute_names &= self.class.column_names
|
||||
attribute_names.delete_if do |name|
|
||||
self.class.readonly_attribute?(name)
|
||||
self.class.readonly_attribute?(name) ||
|
||||
column_for_attribute(name).virtual?
|
||||
end
|
||||
end
|
||||
|
||||
# Filters out the primary keys, from the attribute names, when the primary
|
||||
# Filters out the virtual columns and also primary keys, from the attribute names, when the primary
|
||||
# key is to be generated (e.g. the id attribute has no value).
|
||||
def attributes_for_create(attribute_names)
|
||||
attribute_names &= self.class.column_names
|
||||
attribute_names.delete_if do |name|
|
||||
pk_attribute?(name) && id.nil?
|
||||
(pk_attribute?(name) && id.nil?) ||
|
||||
column_for_attribute(name).virtual?
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -87,6 +87,10 @@ module ActiveRecord
|
|||
comment.hash
|
||||
end
|
||||
|
||||
def virtual?
|
||||
false
|
||||
end
|
||||
|
||||
private
|
||||
def deduplicated
|
||||
@name = -name
|
||||
|
|
|
@ -23,6 +23,16 @@ if ActiveRecord::Base.connection.supports_virtual_columns?
|
|||
VirtualColumn.create(name: "Rails")
|
||||
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 teardown
|
||||
@connection.drop_table :virtual_columns, if_exists: true
|
||||
VirtualColumn.reset_column_information
|
||||
|
|
Loading…
Reference in a new issue