7.0.3.1 breaks ActiveRecord.store with yaml coders.
Steps to reproduce
Try to use ActiveRecord.store
in Rails 7.0.3.1 with the default YAML encoder
# frozen_string_literal: true
require "bundler/inline"
gemfile(true) do
source "https://rubygems.org"
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
# Activate the gem you are reporting the issue against.
gem "activerecord", "7.0.3.1"
gem "sqlite3"
end
require "active_record"
require "minitest/autorun"
require "logger"
# This connection will do for database-independent bug reports.
ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:")
ActiveRecord::Base.logger = Logger.new(STDOUT)
ActiveRecord::Schema.define do
create_table :posts, force: true do |t|
t.text :data
end
end
class Post < ActiveRecord::Base
store :data, accessors: [:title]
end
class BugTest < Minitest::Test
def test_store
post = Post.create!(title: "who needs a schema?")
assert_equal "who needs a schema?", post.title
end
end
Expected behavior
It should serialize simple values into the data column & back out, like it used to in Rails 7.0.3
Actual behavior
It raises Psych::DisallowedClass -
Psych::DisallowedClass: Tried to load unspecified class: ActiveSupport::HashWithIndifferentAccess
RUBY/lib/ruby/3.0.0/psych/class_loader.rb:99:in `find'
RUBY/lib/ruby/3.0.0/psych/class_loader.rb:28:in `load'
RUBY/lib/ruby/3.0.0/psych/visitors/to_ruby.rb:424:in `resolve_class'
RUBY/lib/ruby/3.0.0/psych/visitors/to_ruby.rb:288:in `visit_Psych_Nodes_Mapping'
RUBY/lib/ruby/3.0.0/psych/visitors/visitor.rb:30:in `visit'
RUBY/lib/ruby/3.0.0/psych/visitors/visitor.rb:6:in `accept'
RUBY/lib/ruby/3.0.0/psych/visitors/to_ruby.rb:35:in `accept'
RUBY/lib/ruby/3.0.0/psych/visitors/to_ruby.rb:318:in `visit_Psych_Nodes_Document'
RUBY/lib/ruby/3.0.0/psych/visitors/visitor.rb:30:in `visit'
RUBY/lib/ruby/3.0.0/psych/visitors/visitor.rb:6:in `accept'
RUBY/lib/ruby/3.0.0/psych/visitors/to_ruby.rb:35:in `accept'
RUBY/lib/ruby/3.0.0/psych.rb:362:in `safe_load'
GEMS/activerecord-7.0.3.1/lib/active_record/coders/yaml_column.rb:50:in `yaml_load'
GEMS/activerecord-7.0.3.1/lib/active_record/coders/yaml_column.rb:26:in `load'
GEMS/activerecord-7.0.3.1/lib/active_record/store.rb:275:in `load'
GEMS/activerecord-7.0.3.1/lib/active_record/type/serialized.rb:22:in `deserialize'
GEMS/activemodel-7.0.3.1/lib/active_model/attribute.rb:168:in `type_cast'
GEMS/activemodel-7.0.3.1/lib/active_model/attribute.rb:43:in `value'
GEMS/activemodel-7.0.3.1/lib/active_model/attribute_set.rb:46:in `fetch_value'
GEMS/activerecord-7.0.3.1/lib/active_record/attribute_methods/read.rb:38:in `_read_attribute'
GEMS/activemodel-7.0.3.1/lib/active_model/attribute_methods.rb:277:in `data'
GEMS/activerecord-7.0.3.1/lib/active_record/store.rb:251:in `prepare'
GEMS/activerecord-7.0.3.1/lib/active_record/store.rb:222:in `read'
GEMS/activerecord-7.0.3.1/lib/active_record/store.rb:208:in `read_store_attribute'
GEMS/activerecord-7.0.3.1/lib/active_record/store.rb:140:in `block (3 levels) in store_accessor'
ar-store.rb:37:in `test_store'
System configuration
Rails version: 7.0.3.1
Ruby version: 3.0.4