DynamoDB put_item错误“没有这样的成员”(Ruby SDK)

时间:2019-04-12 06:51:20

标签: ruby amazon-dynamodb aws-sdk-ruby

我正在将带有Ruby 2.5的Ruby SDK aws-sdk-dynamodb用于AWS Lambda函数,该函数将项目保存到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 :(得分:0)

当然,该错误消息不是很有帮助,但仔细阅读example documentation可以发现,当在表对象上调用方法item:时,DynamoDB需要键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)