Skip to content

Commit 5593aff

Browse files
yahondaclaude
andcommitted
Prefer activerecord_class.default_timezone when available
Schema#default_timezone read the global ActiveRecord.default_timezone (or ActiveRecord::Base.default_timezone for AR < 7.0) unconditionally, ignoring the configured @connection.activerecord_class. If a caller wired plsql up with an ActiveRecord subclass that overrides default_timezone, the override was silently dropped. Check the connection's activerecord_class first and call default_timezone on it when the class responds to it. AR 5.x – 7.x expose default_timezone on ActiveRecord::Base (and therefore on all subclasses), which honors any subclass override. AR 8.0 removed the class-level accessor, so in that case fall back to the module-level ActiveRecord.default_timezone. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent f4aa7ab commit 5593aff

1 file changed

Lines changed: 6 additions & 3 deletions

File tree

lib/plsql/schema.rb

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,12 @@ def default_timezone
9999
@original_schema.default_timezone
100100
else
101101
@default_timezone ||
102-
# Use ActiveRecord default_timezone when ActiveRecord connection is used
103-
(@connection && @connection.activerecord_class &&
104-
(ActiveRecord.respond_to?(:default_timezone) ? ActiveRecord.default_timezone : ActiveRecord::Base.default_timezone)) ||
102+
# Use ActiveRecord default_timezone when ActiveRecord connection is used,
103+
# preferring the connection's activerecord_class so a subclass override
104+
# (available in AR < 8.0) is honored before falling back to the
105+
# module-level accessor (AR 7.0+; the only one in AR 8.0+).
106+
(@connection && (ar_class = @connection.activerecord_class) &&
107+
(ar_class.respond_to?(:default_timezone) ? ar_class.default_timezone : ActiveRecord.default_timezone)) ||
105108
# default to local timezone
106109
:local
107110
end

0 commit comments

Comments
 (0)