ruby-on-rails - 使用 Ruby on Rails 连接两个哈希表 (dynamoDb)

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

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

目前我正在查询一个很好的表,但我需要引入另一个表,但我花了很多时间找到一个简单的 ruby​​ 示例而不使用 ActiveRecord(以避免对预先存在的代码)。

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

假输出以保护无辜者

数据库当前

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

数据库类型

{"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,除非我以后会拥有这个项目)。

最佳答案

我最终是这样做的。对于那些熟悉 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

关于ruby-on-rails - 使用 Ruby on Rails 连接两个哈希表 (dynamoDb),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41918985/

相关文章:

ruby - Ruby 的方法解除绑定(bind)机制有什么意义?

amazon-web-services - 如何使用 Cloudformation 将 LoadBalancer ListenerRule 映射到特定端口?

amazon-web-services - 创建具有关系的对象时,AWS Amplify Appsync 解决错误

ruby-on-rails - 从 url 导入 CSV Errno::ENAMETOOLONG: 文件名太长

jquery - 将多个输入字段与rails3-jquery-autocomplete一起使用

ruby - 捕获特定字符之间的字符串

ruby - 向 ruby​​ 中的多个类添加方法

amazon-web-services - Terraform:在另一个资源中引用在 for_each 中创建的资源

ruby-on-rails - 如何将带有 Devise 的 Rails 应用程序变成 SSO/CAS 服务器?

ruby-on-rails - Rails Assets 管道并从 nginx 提供静态文件