使用Ruby on Rails加入两个哈希表(dynamoDb)

时间:2017-01-29 08:28:19

标签: ruby-on-rails ruby amazon-web-services amazon-dynamodb

我只是一个项目的Ruby新手 - 我需要使用aws dynamodb连接两个表。基本上相当于sql left join。但是由于dynamodb显然不支持我需要在阵列级别实现它。

目前我正在查询一个就好了,但是我需要引入另一个表,但是我有一点时间在没有使用ActiveRecord的情况下找到一个带有rails的ruby的简单示例(以避免导致对已有的代码进行大修。)

client = Aws::DynamoDB::Client.new
response = client.scan(table_name: 'db_current')
@items = response.items

虚假输出以保护无辜

db_current

{"machine_id"=>"pc-123435", "type_id"=>"t-56778"}

db_type

{"description"=>"Dell 5 Dev Computer", "Name"=>"Dell", "type_id"=>"t-56778"}

我想我可能要做两件事:

 client = Aws::DynamoDB::Client.new
 db_c = client.scan(table_name: 'db_current')
 @c_items = db_c.items

 client = Aws::DynamoDB::Client.new
 db_t = client.scan(table_name: 'db_type')
 @t_items = db_c.joins(db_t['type_id'])  <=== then merge them

这里。

 where I'll ultimately display description/name/machine_id

但遗憾的是没有运气。

我正在寻找建议。我更喜欢让它变得简单 理解(这可能听起来不合理,除非我将继续拥有这个项目,否则我不想引入ActiveRecord。)

1 个答案:

答案 0 :(得分:0)

我最终这样做了。那些熟悉Ruby的人可能会有一个更优雅的解决方案......我不是。

基本上对于第一个散列数组(表)中的每个项目,我使用那个中的ID来过滤第二个散列数组的项目。在此过程中合并它们。然后附加到我将用于我的UI的最终目的地。

    @c_by_id = Array.new

    @b_items.each do |item|
        pjoin = @c_items.first {|h| h['b_id'] == item['b_id']}
        newjoin = item.merge(pjoin)
        @c_by_id.append(newjoin)
    end