DynamoDB ошибка put_item «нет такого члена» (Ruby SDK) - PullRequest
0 голосов
/ 12 апреля 2019

Я использую Ruby SDK aws-sdk-dynamodb с Ruby 2.5 для лямбда-функции AWS, которая сохраняет элемент в таблицу AWS DynamoDB.

Я могу успешно сохранить предмет с этим кодом:

    def save!
      hash = {
        table_name: ‘my-table’,
        item: {
          message_sid: '123456',
          created_at: Time.now.to_s
        }
      }
      dynamo = Aws::DynamoDB::Client.new(region: ‘us-east-1’)
      dynamo.put_item(hash)
      puts 'item successfully saved'
      true
    rescue => error
      puts "Unable to save item: #{error}: #{error.message}"
      false
    end

Когда я использую этот код, я получаю сообщение об ошибке «нет такого члена: message_sid»:

    def save!
      dynamoDB = Aws::DynamoDB::Resource.new(region: ‘us-east-1’)
      table = dynamoDB.table(‘my-table’)
      hash = { message_sid: '123456', created_at: Time.now.to_s }
      table.put_item(hash)
      puts 'item successfully saved'
      true
    rescue => error
      puts "Unable to save item: #{error}: #{error.message}"
      false
    end

Я не нашел никакой документации DynamoDB для ошибки «нет такого члена». Почему второй пример терпит неудачу?

1 Ответ

0 голосов
/ 12 апреля 2019

По общему признанию сообщение об ошибке не очень полезно, но внимательное прочтение примера документации показывает, что DynamoDB ожидает ключ item:, когда метод put_item вызывается для объекта таблицы.Так что этот код будет работать:

    def save!
      dynamoDB = Aws::DynamoDB::Resource.new(region: ‘us-east-1’)
      table = dynamoDB.table(‘my-table’)
      hash = { message_sid: '123456', created_at: Time.now.to_s }
      table.put_item(item: hash)
      puts 'item successfully saved'
      true
    rescue => error
      puts "Unable to save item: #{error}: #{error.message}"
      false
    end

В частности, вы должны использовать table.put_item(item: hash), а не table.put_item(hash).

...