nul*_*tek 11 api-design ruby-on-rails ruby-on-rails-4
我正在我的Rails 4.2.6应用程序中创建一个简单的api端点,但我遇到了问题.
当我点击网址:http://lvh.me:9077 / api/v1/gres我收到以下错误:
Unable to autoload constant Api::V1::GrubsController, expected /Users/shakycode/code/grubs/app/controllers/api/v1/grubs_controller.rb to define it
Run Code Online (Sandbox Code Playgroud)
这是我的routes.rb文件定义端点.
namespace :api do
namespace :v1 do
resources :grubs, only: [:index]
end
end
Run Code Online (Sandbox Code Playgroud)
这是我的app/controllers/api/v1/grubs_controller.rb
class API::V1::GrubsController < ApplicationController
protect_from_forgery with: :null_session
before_action :destroy_session
def destroy_session
request.session_options[:skip] = true
end
def index
@grubs = Grub.all
respond_to do |format|
format.json { render json: @grubs}
end
end
end
Run Code Online (Sandbox Code Playgroud)
我有一个Rails 4.2.1应用程序,我使用相同的策略,但在4.2.6我发生这种错误时,我试图拉动API.
提前致谢!
更新:这是在浏览器中使用better_errors引发的异常:
load_missing_constantactivesupport (4.2.6) lib/active_support/dependencies.rb
490
491
492
493
494
495
496
497
498
499
500
if loading.include?(expanded)
raise "Circular dependency detected while autoloading constant #{qualified_name}"
else
require_or_load(expanded, qualified_name)
raise LoadError, "Unable to autoload constant #{qualified_name}, expected #{file_path} to define it" unless from_mod.const_defined?(const_name, false)
return from_mod.const_get(const_name)
end
elsif mod = autoload_module!(from_mod, const_name, qualified_name, path_suffix)
return mod
elsif (parent = from_mod.parent) && parent != from_mod &&
Run Code Online (Sandbox Code Playgroud)
Ant*_*y E 17
Rails通常只会将模块的名字大写.换句话说,Rails期望命名空间Api::V1::GrubsController,但你将它定义为API::V1::GrubsController.
小智 5
你的班级名称是
class API::V1::GrubsController < ApplicationController
Run Code Online (Sandbox Code Playgroud)
而在您的错误中,它试图寻找Api::V1::GrubsController. 将班级中的名称更改为Api
| 归档时间: |
|
| 查看次数: |
7740 次 |
| 最近记录: |