Skip to content

Commit c0707d1

Browse files
committed
Overrides #reset_primary_key to modify @primary_key.
ar-multitenant expects that #primary_key returns single column instead of composite primary_keys for backward compatibilities. Previously overwriting #primary_key to return single pk, but since the timing for writing @primary_key has changed since Rails 7.2, this way is no longer available. Instead, overwriting `#reset_primary_key`, which handles calculating `@primary_key`.
1 parent 221a914 commit c0707d1

File tree

1 file changed

+7
-12
lines changed

1 file changed

+7
-12
lines changed

lib/activerecord-multi-tenant/model_extensions.rb

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -42,20 +42,15 @@ def partition_key
4242
.try(:instance_variable_get, :@partition_key)
4343
end
4444

45-
# Avoid primary_key errors when using composite primary keys (e.g. id, tenant_id)
46-
def primary_key
47-
if defined?(PRIMARY_KEY_NOT_SET) ? !PRIMARY_KEY_NOT_SET.equal?(@primary_key) : @primary_key
48-
return @primary_key
49-
end
50-
45+
def reset_primary_key
5146
primary_object_keys = Array.wrap(connection.schema_cache.primary_keys(table_name)) - [partition_key]
5247

53-
@primary_key = if primary_object_keys.size == 1
54-
primary_object_keys.first
55-
elsif table_name &&
56-
connection.schema_cache.columns_hash(table_name).include?(DEFAULT_ID_FIELD)
57-
DEFAULT_ID_FIELD
58-
end
48+
self.primary_key = if primary_object_keys.size == 1
49+
primary_object_keys.first
50+
elsif table_name &&
51+
connection.schema_cache.columns_hash(table_name).include?(DEFAULT_ID_FIELD)
52+
DEFAULT_ID_FIELD
53+
end
5954
end
6055

6156
def inherited(subclass)

0 commit comments

Comments
 (0)