我正在将带有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文档的错误“没有这样的成员”。为什么第二个示例失败?
答案 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)
。