2017-11-28 3 views
0

4つの関連するテーブルを結合するクエリがあれば、多次元ハッシュを使用したいと考えています。SQLクエリを多次元ハッシュに変換する方法は?

主に私は3つのレベルの情報を持つ画面を提供したいと思います。プロセスをクリックすると、アクティビティのあるテーブルが取得され、アクティビティをクリックすると、pollution_originsとsub_pollution_originsの両方のテーブルが取得されます。

私は5つのモデルを持っています。そのうちの1つはリレーショナルモデル(process_model_maps)で、他の4つを接続します。

_process_models_maps_list.html.erb:それらの間の階層が現在

Iているこの(sub_pollution_origin_modelsは、少なくとも一つのprocess_modelの一部であるactivity_modelsの内側にある内部pollution_origin_models、ある)があり

<table id="all_processes"> 
    <tbody> 
    <% @process_models.each do |process_model| %> 
     <tr class="process_line_color"> <td><%= process_model.name %></td> </tr> 
     <tr> 
     <%= render partial: "process_activities", 
    locals: { process_model: process_model} %>     
     </tr> 
    <% end %> 
    </tbody> 
</table> 

_process_activities.html.erb

<table id = "process_activities"> 
     <tbody> 
     <% process_model.activity_models.each do |activity_model| %> 
     <tr class="activity_line_color"> <td><%= activity_model.name %></td> </tr> 
     <tr> 
     <%= render partial: "activity_sub_pollution_origin_models", 
    locals: { activity_model: activity_model} %> 
     </tr> <!-- row activity_model details--> 
     <% end %> 
     </tbody> 
    </table> 

_activity_sub_pollution_origin_models.html.erb

<table id = "activity_details"> 
    <tbody> 
    <% activity_model.process_model_maps.each do |process_model_map| %> 
    <tr> 
     <td> <%= process_model_map.pollution_origin_model.name %></td> 
     <td> <%= process_model_map.sub_pollution_origin_model.name %> </td> 
    </tr> 
    <% end %> 
    </tbody> 
</table>  

問題は、私は普通のActiveRecordのを使用する場合、レールが経つと、画面のパフォーマンスを殺すクエリの多くを、設定されることです。

私は、何らかの形でプリロードされたハッシュがあれば、エンドユーザにとってはこれが簡単になると思いました。私は

def self.get_tree_map 

    joins(process_model_maps: [:activity_model, :pollution_origin_model, :sub_pollution_origin_model]).select("process_models.id, process_models.name, activity_models.id,activity_models.name, process_model_maps.id , pollution_origin_models.name,sub_pollution_origin_models.name") 

    end 

を持っており、今のようなものを得ることに考えています私ProcessModel.rbで

@process_models = Process.all.joins(:activities).merge(
    Activity.joins(:pollution_origins)) 

:あなたのコントローラで

{Project_id: 1, name: Fundicao, {activity_id:1, name: Decapagem,{process_model_maps_id: 2, pollution_origin_models_id: 1, pollution_origin_models_name: " Energia ", sub_pollution_origin_models_id: 1, sub_pollution_origin_models_name: "Energia Eletrica" },...}}}

答えて

0

それはfetcする必要があります1回のSQL呼び出しで必要なすべてのデータを取得できます。

関連する問題