从Rails中的多连接查询创建JSON报告

时间:2014-08-24 00:44:25

标签: mysql sql ruby-on-rails json activerecord

我正在尝试创建一个自定义控制器操作(类似“报告”),我可以用它来获取某些图表的JSON数据。鉴于数据的核心在我所称的Table1控制器中,这就是我放置方法的地方。 (我也尝试将它移动到Table2控制器,并创建一个全新的Report控制器,所有不良结果。)我遇到的问题是让它呈现JSON。为简化起见,我将方法简化为以下内容:

def report
    @table1 = Table1.all
    respond_to do |format|
      format.json { render json: @table1}
    end
end

导航到/report/report.json会抱怨The action 'report' could not be found for Table1Controller。只需创建文件app/views/table1/report.html.erb就足以让该消息为前者消失。至于后者,它现在抱怨没有模板。有趣的是,我可以在同一目录中创建一个report.json.erb文件,错误将会发生,但没有JSON数据。

更有趣的是,我在不同的控制器中做了同样的事情并且工作正常。 = /

以上只是我的问题的第一部分。我有几个相关的表,并希望提取需要多个连接的特定信息。我可以编写查询,但我似乎无法让Rails在任何一点上与我合作。我认为有一种“Rails”方式可以做到这一点,我只是没有这样做,这也是我遇到困难的原因。以下是查询:

select
    table4.name as "Collection",
    count(table4.name) as "Totals"
from
    table1 
left join 
    table2 on table1.table2_id = table2.id
left join 
    table3 on table1.table3_id = table3.id
left join 
    table4 on table3.table4_id = table4.id
left join 
    table5 on table1.table5_id = table5.id
group by table4.name
order by "Totals" desc

我尝试添加几种路线排列。我还尝试添加一个成员路由如下:

resources :table1 do
  member do
    get 'report'
  end
end

结果路线为/table1/:id/report(.:format)。这至少声称它无法找到“报告”行动。所有其他人只是抱怨“表演”行动。

1 个答案:

答案 0 :(得分:0)

我不知道为什么,但我能够通过将所有内容移动到另一个控制器来实现这一点。 /耸肩。