1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

dynamoidでカラムを追加したい

Posted at

はじめに

dynamoidで作成したテーブルに新しくカラム(ここではuser_comments)を追加してレコードを新規作成したところ、DBのカラムが変更されませんでした。
原因は大したことがなかったのですが、参考記事が少なかったので簡単にまとめてみます。

結論

テーブル作成時に誤った型の値を渡していました。
user_commentsに値を決め打ちして動作確認をしていましたが、画面にエラーが出ず原因の特定ができませんでした。
これはvalidatesにuser_commentsを指定していなかったためでした。validatesにuser_commentsを指定すると以下のようなエラーが確認できました。

1681106079.png

対象ファイル(誤)

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はマイグレーション機能がないですが、モデルにカラムを記載するだけで変更点を検知してくれるようです。
インデックスの張り替えをするためには一度テーブルを削除しないといけないのかと思っていましたが、そんなことがなくて安心しました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?