Closed1

Rails5.2から6.0に上げたらserializeが使えなくなった

hatsu0412hatsu0412

概要

Railsを5.2から6.0にアップデートした際に serialize を使用しているカラムが保存できなくなった

以下のような users テーブルで sweets で serialize を使用

id name sweets
1 Taro ---
- candy
- snack
2 Jiro ---
- chocolate
- biscuit
3 Saburo ---
- cookie
- gum

model は以下のように記載

user.rb
class User < ApplicationRecord
  serialize :sweets, Array
end

sweets を更新しようとすると下記エラーになり保存ができなくなった

Psych::DisallowedClass: Tried to load unspecified class: ActiveSupport::HashWithIndifferentAccess

環境

ruby 2.6.9p207 (2021-11-24 revision 67954) [x86_64-linux]
Rails 6.0.6

対応

以下のいずれかで対応する。
今回は2を実施した

  1. Psych のバージョンアップが原因なので、4系から3系にバージョンを下げる
  2. config/application.rb に以下を記載(非推奨っぽい)
config.active_record.yaml_column_permitted_classes = [
  Symbol,
  ActiveSupport::HashWithIndifferentAccess
]
  1. config/application.rb に以下を記載(一番非推奨っぽい)
config.active_record.use_yaml_unsafe_load = true

感想

serialize撲滅したい!!

参考

このスクラップは2022/10/17にクローズされました