【发布时间】:2021-09-21 22:02:27
【问题描述】:
我正在使用 JSONAPI-Resourcs 一个 API 项目。当我尝试命名空间时,我遇到了服务器无法启动的错误。当我运行bin/rails zeitwerk:check 时深入挖掘,我收到以下错误:
NameError: JSONAPI: Could not find resource 'api/v1/connectors'. (Class Api::V1::ConnectorResource not found)
/Users/David/Code/Ruby/my_project/config/routes.rb:7:in `block (3 levels) in <main>'
/Users/David/Code/Ruby/my_project/config/routes.rb:6:in `block (2 levels) in <main>'
/Users/David/Code/Ruby/my_project/config/routes.rb:5:in `block in <main>'
/Users/David/Code/Ruby/my_project/config/routes.rb:3:in `<main>'
/Users/David/Code/Ruby/my_project/config/environment.rb:5:in `<main>'
/Users/David/Code/Ruby/my_project/bin/rails:5:in `<top (required)>'
/Users/David/Code/Ruby/my_project/bin/spring:10:in `block in <top (required)>'
/Users/David/Code/Ruby/my_project/bin/spring:7:in `<top (required)>'
Tasks: TOP => zeitwerk:check => environment
(See full trace by running task with --trace)
只需按照指南尝试添加命名空间资源即可。如果我删除命名空间,它就像一个魅力。
connectors_controller.rb
module Api
module V1
class ConnectorsController < ApplicationController
end
end
end
connector_resource.rb
module Api
module V1
class ConnectorResource < JSONAPI::Resource
attributes :name, :description, :save_path, :created_at, :updated_at
end
end
end
routes.rb
Rails.application.routes.draw do
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
namespace :api do
namespace :v1 do
jsonapi_resources :connectors, only: %i[index show]
end
end
end
【问题讨论】:
-
尝试运行
spring stop。 Zeitwerk 不会像经典的自动加载器那样经常“卡住”,但它确实会发生。 -
另一方面,我建议您设置一个变形并使用
API而不是Api,因为根据 Ruby 约定,首字母缩写词应该全部大写(参见 HTTP、CSV、JSON 等)
标签: ruby-on-rails ruby jsonapi-resources