スリ飯屋MaLankaのフリーエンジニアな日々

このブログでは、フリーランス5期目となる自身の実体験から、フリーランスエンジニアになるためのノウハウ、ブログや沖縄移住、スリランカの最新情報について発信します。

【Rails heroku】ActiveRecord::AttributeMethods::Serialization::ColumnNotSerializableError

※記事内に提携先企業のアフィリエイト広告(リンク、バナー等)、Google広告を含む場合があります

【Rails heroku】ActiveRecord::AttributeMethods::Serialization::ColumnNotSerializableError

Railsでheroku(postgreSQL)を使っていた時に出たエラー、ActiveRecord::AttributeMethods::Serialization::ColumnNotSerializableError について書きました。

日本語の情報があまりなかったので解決に割と時間がかかりました。。。

同じエラーが出た方の参考になれば嬉しいです。

【Rails heroku】ActiveRecord::AttributeMethods::Serialization::ColumnNotSerializableError




起こったこと

モデルのserializeメソッドで下記のように、tagsというText型のカラムを、Array型として扱う ようにしていました。

# Text型のフィールドを、配列で扱えるようにする
serialize :tags, Array

ですが、postgreSQL(herokuのデフォルトのDBはpostgreSQL) では、モデルのserializeメソッドが使えない ようです。

ActiveRecord::AttributeMethods::Serialization::ColumnNotSerializableError (Column `tags` of type ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Array does not support `serialize` feature.
Usually it means that you are trying to use `serialize`
on a column that already implements serialization natively.
  • 参考リンク

ruby on rails - PostgreSQL::OID::Array does not support `serialize` feature - Stack Overflow

さらに、tagsカラムをArray型に出来ずText型のままであるため、

  • tagsカラムがArray型を期待しているメソッドでエラーになる

ということが起こっていました。

例えば、

  • each

  • collect

  • filter

などの、Array型のオブジェクトが呼び出せるメソッドを、Text型(というかString型)に入っているオブジェクトから呼ぶとエラーになります。

Array#each (Ruby 3.0.0 リファレンスマニュアル)

Enumerable#collect (Ruby 3.0.0 リファレンスマニュアル)

Array#filter (Ruby 3.0.0 リファレンスマニュアル)

対策

そのため、

  • postgreSQLを利用する際は、モデルのserializeメソッドで、特定のカラムをArray型に変換する前提での実装をしない

ようにする必要があります。

補足

開発環境ではserializeメソッドが使えるので、tagsカラムをArray型に出来ます。

# text型のフィールドを、配列で扱えるようにする
# postgreSQLはserialize使用不可
# もし使う場合、herokuデプロイ時(postgreSQL利用時)はコメントアウト必須 + 実装の見直し要
serialize :tags, Array

が、不必要に開発環境と本番環境で実装を変えることはあまりよくないです。

もっといい実装方法がないか検討しましょう。




RailsやRubyを学びたい人へ


RailsやRubyを学びたい人は、

RailsHack(レイルズハック)という、

最近できた新しいプログラミングスクール(今なら通常価格69,800円が、早期割で29,800円!)か、

Udemy で下記のコースを受講すると良いです★


✅1. フルスタックエンジニアが教える 即戦力Railsエンジニア養成講座

✅2. 【はむ式】ハンズオンで学ぶRuby on Rails 6【Dockerにも触れられる】 <- おすすめ。ハムさんはReactやTypeScriptの教材も非常に丁寧。

✅3. はじめてのRuby on Rails入門-RubyとRailsを基礎から学びWebアプリケーションをネットに公開しよう




また、

Udemy は定期的にセールをやっていますし(90%OFFとかもザラ)、

「30日間なら返金できる」ので、

満足できなかった時でも安心です。


f:id:mah666hhh:20201129193352p:plain


【公式】RailsHack(レイルズハック)

【公式】Udemyで学んでみる