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で動作確認をさせていただく。