2017-01-29 6 views
2

1つのプロジェクトでRubyを初めて使う - 私はaws dynamodbで2つのテーブルを結合する必要があります。基本的にsqlと同等の機能はjoinを残しました。しかしdynamodbは明らかにサポートしていないので、配列レベルでそれを実現する必要があります。Ruby on Railsで2つのハッシュテーブル(dynamoDb)を結合する

現在のところ、私はこの1つのテーブルを持ってきているだけですが、この他のテーブルを持ってくる必要がありますが、オーブホールを起こさないように、ActiveRecordを使用しないで、既存のコードで)。無実の

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 
response = client.scan(table_name: 'db_current') 
@items = response.items 

偽の出力私は2を作るために持っているかもしれないと思った:

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をプルしたくありません)。

答えて

0

私はこのようにしてしまった。 Rubyに慣れている人にとっては、おそらくより洗練された解決策があります。私はそうではありません。

基本的に最初のハッシュ配列(テーブル)の各項目について、そのIDを使用して2番目のハッシュ配列の項目をフィルタリングします。プロセスでそれらをマージします。 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 
関連する問題