【问题标题】:How to convert a SQL query to a multidimensional hash?如何将 SQL 查询转换为多维哈希?
【发布时间】:2017-11-29 12:16:29
【问题描述】:

我希望有一个多维散列,给定一个连接 4 个相关表的查询。

主要是我希望它提供一个包含三个级别信息的屏幕。当我点击 Process 时,我会得到一个包含活动的表,当我点击活动时,会得到一个同时包含污染源和 sub_pollution_origins 的表。

所以,我有 5 个模型,其中一个是关系模型 (process_model_maps),它连接其他四个。

它们之间有一个层次结构(sub_pollution_origin_models在pollution_origin_models里面,在activity_models里面,它是至少一个process_model的一部分)

目前我有这个:

_process_models_maps_list.html.erb

<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,rails 会继续并设置大量查询,这会降低屏幕的性能。

所以我想,如果我以某种方式预先加载了哈希,这将使最终用户的任务更容易。

在我的 ProcessModel.rb 我有

  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

现在正在考虑获得类似的东西:

{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" },...}}}

【问题讨论】:

    标签: dictionary multidimensional-array hash


    【解决方案1】:

    在您的控制器中:

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

    这应该通过一个 SQL 调用获取您想要的所有数据。

    【讨论】:

      猜你喜欢
      • 2019-07-14
      • 2021-12-24
      • 2018-12-12
      • 1970-01-01
      • 1970-01-01
      • 2012-11-11
      • 2016-05-08
      • 2016-11-15
      • 1970-01-01
      相关资源
      最近更新 更多