はじめに
dynamoidで作成したテーブルに新しくカラム(ここではuser_comments)を追加してレコードを新規作成したところ、DBのカラムが変更されませんでした。
原因は大したことがなかったのですが、参考記事が少なかったので簡単にまとめてみます。
結論
テーブル作成時に誤った型の値を渡していました。
user_commentsに値を決め打ちして動作確認をしていましたが、画面にエラーが出ず原因の特定ができませんでした。
これはvalidatesにuser_commentsを指定していなかったためでした。validatesにuser_commentsを指定すると以下のようなエラーが確認できました。
対象ファイル(誤)
app/backend/models/hoge.rb
略
include Dynamoid::Document
table name: :hoge, key: :id, capacity_mode: :on_demand
field :title, :string
field :user_comments, :array
validates :title, presence: true
def self.create_hoge(hoge_value)
Hoge.create(id: hoge_value[:id],
title: hoge_value[:title],
// arrayなのにstringで単体要素を指定してしまっている
user_comments: "test")
end
対象ファイル(正)
app/backend/models/hoge.rb
略
include Dynamoid::Document
table name: :hoge, key: :id, capacity_mode: :on_demand
field :title, :string
field :user_comments, :array
validates :title, presence: true
def self.create_hoge(hoge_value)
Hoge.create(id: hoge_value[:id],
title: hoge_value[:title],
user_comments: ["test"])
end
おわりに
dynamodbはマイグレーション機能がないですが、モデルにカラムを記載するだけで変更点を検知してくれるようです。
インデックスの張り替えをするためには一度テーブルを削除しないといけないのかと思っていましたが、そんなことがなくて安心しました。