【发布时间】: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