Rails 5.2路由报错:Ajax::Pacientes#obtener_datos_paciente非支持的控制器名称
问题根源
路由配置中控制器名称的格式不符合Rails约定:Rails路由解析命名空间下的控制器时,使用斜杠/分隔命名空间与控制器名,你配置中使用的双冒号::无法被正确识别,因此抛出is not a supported controller name错误。
修复方案
方案1:直接修改现有match配置
仅需要将路由中控制器的分隔符从双冒号改为斜杠即可生效,修改后代码如下:
match( "ajax/pacientes/:rut" => "ajax/pacientes#obtener_datos_paciente", :as => :obtener_datos_paciente, :via => :get )
修复后你原有UsuariosController中的路径别名obtener_datos_paciente_ajax_pacientes_path不需要额外修改即可正常使用。
方案2:使用Rails标准namespace配置(推荐)
更符合Rails路由规范的写法是用namespace块统一管理同命名空间下的接口,代码可读性和可维护性更高:
namespace :ajax do get 'pacientes/:rut', to: 'pacientes#obtener_datos_paciente', as: :obtener_datos_paciente end
使用该写法的话,生成的路由别名为ajax_obtener_datos_paciente_path,需要同步修改UsuariosController中的别名定义:
alias url_paciente ajax_obtener_datos_paciente_path
其他适配优化建议
- 你现有代码中
Usuario.first :rut => params[:rut]的查询写法在Rails 5.2版本中建议替换为Usuario.find_by(rut: params[:rut]),旧语法存在兼容风险。 - 当前查询逻辑不会主动抛出
Excepciones::DatosNoExistentesError异常,你可以根据业务需要调整为find_by!主动触发异常,否则该救援块不会被执行。
内容的提问来源于stack exchange,提问作者Diego Muñoz
相关产品推荐
相关产品推荐

