加载Flash燃尽图出现'No route matches'错误如何修复
Rails燃尽图路由匹配错误修复方案
该错误核心原因是Rails路由表中未匹配到version_burndown_charts控制器下get_graph_data动作的对应路由,按以下步骤定位修复:
- 第一步:校验现有路由配置
在项目根目录执行以下命令,查看目标路由是否已注册:
如果命令无任何输出,说明rake routes | grep get_graph_dataconfig/routes.rb中未配置对应路由,根据项目的资源嵌套规则补充路由即可,推荐使用嵌套资源写法:
如果不需要RESTful风格嵌套,也可以写独立匹配路由:# config/routes.rb resources :projects do resources :versions do get 'version_burndown_charts/get_graph_data', on: :member end endget 'projects/:project_id/versions/:version_id/version_burndown_charts/get_graph_data', to: 'version_burndown_charts#get_graph_data', as: 'burndown_graph_data' - 第二步:修正视图层路径生成逻辑
很多时候路由配置正确但仍报错,是因为url_for自动解析控制器/参数失败,优先使用命名路由路径替代手写参数哈希,避免匹配错误:
如果要保留# 对应上面独立路由配置的命名路径,直接传模型对象即可自动解析id @graph = open_flash_chart_(880, 450, burndown_graph_data_path(@project, @version), true)url_for写法,必须显式传入controller参数,不要让Rails自动推断:@graph = open_flash_chart_(880, 450, url_for(:controller => 'version_burndown_charts', :action => 'get_graph_data', :project_id => @project.id, :version_id => @version.id), true) - 第三步:校验控制器动作定义
确认app/controllers/version_burndown_charts_controller.rb中存在拼写完全一致的get_graph_data动作,避免单词拼写错误、动作定义为私有方法的问题:class VersionBurndownChartsController < ApplicationController # 注意动作必须是public方法,不能写在private下面 def get_graph_data # 此处编写燃尽图数据组装逻辑,返回open_flash_chart要求的格式数据 end end - 第四步:重载配置验证
路由文件修改后必须重启Rails服务才能生效,开发环境下修改路由不会自动重载,重启服务后刷新页面即可正常匹配路由,拉取图表数据完成Flash燃尽图渲染。
额外注意:路由打通后如果图表仍空白,需要检查
get_graph_data返回的数据格式是否符合open_flash_chart的规范,不要返回HTML页面或者格式错误的JSON。
内容的提问来源于stack exchange,提问作者user19328667
相关产品推荐
相关产品推荐

