LoginSignup
22
4

More than 5 years have passed since last update.

DynamoidのCRUDまとめ

Posted at

前書き

Rails5でAPIを作っている際、AWSのDynamoDBの利用が必要になったので
ORMを探したところ、DynamoidというORMが人気そうだったので、実際にCRUDで利用して見ました。

Dynamoidのインストール

gemでバージョンを指定してインストールします。

gem 'dynamoid', '~> 1'

なお、aws-sdkのv2しか対応していないため指定してaws-sdkをインストールします。

gem 'aws-sdk', '~>2'

前準備

config/initializersに

  • aws.rb(すでにある場合は編集なしです。)
  • dynamoid.rb
  • の2ファイルを作成し以下に編集します。

aws.rb

ここには、AWSのクレデンシャルの設定を記述します。

# aws.rb
Aws.config.update(Rails.application.config_for(:aws).symbolize_keys)

dynamoid.rb

ここには、Dynamoidの初期設定を記載します。
例では、namespaceをnullにしています。
Dynamoidは指定するAWSアカウント内にDynamoDBがない場合に自動で作成してくれるのですが
namespaceがnullではない場合、DB名に環境名が入るようになりますので
特に指定しない場合はnullで問題ありません。

# dynamoid.rb
Dynamoid.configure do |config|
  config.namespace = nil
end

modelの記載

DynamoDBのカラムや名称はmodel内に記述します。
idはDynamoidが自動でHash値を入れてくれます。
defaultを指定する場合は例にしたがって記述すればdefault値が代入されます。

# models/table.rb
class Table
  include Dynamoid::Document

  table :name => "TableName", :key => "id", :read_capacity => 5, :write_capacity => 5

  field :is_deleted, :integer, {:default => "0"}
  field :is_enabled, :integer, {:default => "1"}
  field :title, :string
  field :body, :string

CRUD

上述項目でDynamoidの利用ができるようになりますので
CRUDについてコード例をまとめます。

Create

  def self.create(params)
    table = new(params)
    table if table.save
  end

Read

  def self.read_all
    where(
      is_deleted: 0,
      is_enabled: 1,
    ).all
  end

Update

  def self.update(id, params)
    table = find(id)

    table if table.update_attributes(params)
  end

Delete

  def self.delete(id)
    table = find(id)

    table if table.delete
  end

ハマりポイント

CRUDの処理にハマりはありませんでしたが
ControllerからParamaterを渡す際にハマりポイントがあり

params.to_h

と、ハッシュ化する必要がありました。
渡し方の問題かもしれませんが、Paramater部でエラーが出る場合はお試しください。

後書き

ApplicationRecordと同じ形でDynamoDBが触れるので、とてもわかりやすかったです。

22
4
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
22
4