使用JSONAPI-Resources加命名空间后报Could not find resource错误如何解决
排查解决步骤
该错误本质是JSONAPI-Resources的默认资源类查找规则和Rails Zeitwerk自动加载的命名空间路径规则不匹配,按以下顺序排查即可:
- 检查文件存放路径
- 确认
connector_resource.rb必须放在app/resources/api/v1/connector_resource.rb路径下,路径的每一级目录名、文件名拼写必须和类的命名空间、类名完全匹配(大小写也要一致) - 确认
connectors_controller.rb必须放在app/controllers/api/v1/connectors_controller.rb路径下
- 路由显式指定资源命名空间
JSONAPI-Resources默认不会自动读取路由嵌套的命名空间,需要在路由配置中显式指定资源所属模块,修改routes.rb对应配置:
Rails.application.routes.draw do namespace :api do namespace :v1 do jsonapi_resources :connectors, only: %i[index show], resource_module: 'api/v1' end end end
- 修正控制器继承关系
JSONAPI-Resources的资源控制器需要继承JSONAPI::BaseController而非默认的ApplicationController,修改connectors_controller.rb代码:
module Api module V1 class ConnectorsController < JSONAPI::BaseController end end end
- (可选)显式指定控制器对应资源类
如果上述配置后仍报错,可以在控制器中手动绑定对应的资源类,避免自动推断出错:
module Api module V1 class ConnectorsController < JSONAPI::BaseController resource_class Api::V1::ConnectorResource end end end
- 清理缓存验证
修改完成后执行bin/rails tmp:cache:clear清理Rails缓存,再运行bin/rails zeitwerk:check验证加载正常,之后重启服务器即可。
内容的提问来源于stack exchange,提问作者noobmaster69
相关产品推荐
相关产品推荐

