【问题标题】:Create JSON report from multi-join query in Rails从 Rails 中的多连接查询创建 JSON 报告
【发布时间】:2014-08-24 00:44:24
【问题描述】:

我正在尝试创建一个自定义控制器操作(类似于“报告”),可用于获取某些图表的 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)。这至少声称它找不到“报告”动作。所有其他人都只是抱怨“表演”行动。

【问题讨论】:

  • 您可能没有路线。了解并使用“rake 路线”
  • 我确实尝试添加一条看起来像 get 'report', to: 'table1#report' 的路线。还尝试了文件中的几个位置,在resources :table1之前和之后
  • 对于第一部分,您实际上是通过 json 调用调用它还是通过在浏览器中放置“/report”url 来测试它?
  • 对于第二部分,我将只使用 Table4.find_by_sql("") 并添加您的 sql 查询。
  • 谢谢,@Tom。是的。请求 json 响应时,我将“.json”附加到末尾。当我尝试时,它抱怨没有模板。将文件 report.json.erb 添加到相应的目录可以避免错误,但我没有得到 JSON 数据。至于查询部分,我认为这种方法最简单,但不知道是否有更好的“Rails”方式。

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


【解决方案1】:

我不知道为什么,但我能够通过将所有内容转移到另一个控制器来使其工作。 /耸耸肩。

【讨论】:

    猜你喜欢
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多