rails6 で配列をDBに保存する際、軽くハマったので備忘録。すごく簡単だった。

環境

  • Ubuntu 20.04.1 LTS
  • Rails 6.1.3
  • Ruby 2.7.1

モデルを作成

foodモデルの中に、vegetablesという配列、fruitsという配列を作ることにした。

stringを指定しておく。

rails generate scaffold food vegetables:string fruits:string

モデルを編集

シリアライズメソッドを使用する。どうやらyaml形式でカラムの中に保存するようだ。

保存時や取り出すときには自動的に形式を変換してくれるので、特に変換を意識することなく利用できる。

app/models/food.rbを編集以下のように編集する。

class Food < ApplicationRecord
    serialize :vegetables, Array
    serialize :fruits, Array
end

また、Array以外にもHashや自作クラスも指定できるらしい。

動作確認

忘れずに

rails db:migrate

scaffoldデフォルトのnewを利用するとstringのままになっていて少々めんどくさいのでrails consoleで動作確認をさせていただく。

https://api.rubyonrails.org/classes/ActiveRecord/Base.html