我在Ruby on rails中遇到了一个名称错误.正在获取未初始化的常量User::Authors



下面的问题在Rails中。当我转到localhost:3000/Api/v1/users时,我得到一个Name错误。未初始化的常量User::Authors。我找不出这个错误是怎么回事。它指向我的用户控制器,索引。正如我将在下面展示的那样。

错误:

NameError in Api::V1::UsersController#index
uninitialized constant User::Authors
Extracted source (around line #8):
6  @users = User.all
7
8   render json: @users
9  end
10
11
# # GET /users/1

因此,正如我将在下面展示的,这个错误对我来说没有意义。我只是不知道它是从哪里来的:

我的用户控制器:

class Api::V1::UsersController < ApplicationController
before_action :set_user, only: [:show, :update, :destroy]
# # GET /users
def index
@users = User.all
render json: @users
end
# # GET /users/1
def show
render json: @user
end
# POST /users
def create
@user = User.new(user_params)
if @user.save
render json: @user, status: :created, location: @user
else
render json: @user.errors, status: :unprocessable_entity
end
end
# PATCH/PUT /users/1
def update
if @user.update(user_params)
render json: @user
else
render json: @user.errors, status: :unprocessable_entity
end
end
# DELETE /users/1
def destroy
@user.destroy
end
private
# Use callbacks to share common setup or constraints between actions.
def set_user
@user = User.find(params[:id])
end
# Only allow a trusted parameter "white list" through.
def user_params
params.require(:user).permit(:name, :username, :password_digest)
end
end

以防我也发布我的作者控制器。

作者控制器

class Api::V1::AuthorsController < ApplicationController
before_action :set_author, only: [:show, :update, :destroy]
# GET /authors
def index
@authors = Author.all
render json: @authors
end
# GET /authors/1
def show
render json: @author
end
# POST /authors
def create
@author = Author.new(author_params)
if @author.save
render json: @author, status: :created, location: @author
else
render json: @author.errors, status: :unprocessable_entity
end
end
# PATCH/PUT /authors/1
def update
if @author.update(author_params)
render json: @author
else
render json: @author.errors, status: :unprocessable_entity
end
end
# DELETE /authors/1
def destroy
@author.destroy
end
private
# Use callbacks to share common setup or constraints between actions.
def set_author
@author = Author.find(params[:id])
end
# Only allow a trusted parameter "white list" through.
def author_params
params.require(:author).permit(:name)
end
end

我的路线

Rails.application.routes.draw do
post "/api/v1/login", to: "sessions#create" 
delete "/api/v1/logout", to: "sessions#destroy" 
get "/api/v1/get_current_user", to: "sessions#get_current_user"
namespace :api do
namespace :v1 do   
resources :comments
resources :genres
resources :authors
resources :books
resources :users do
resources :books, only: [:index]
end
end
end
end

如果还有什么我应该展示的,我可以更新这个问题。

提前谢谢。

更新:

我被要求添加完整的回溯:

activerecord (6.0.2.1) lib/active_record/inheritance.rb:206:in `compute_type'
activerecord (6.0.2.1) lib/active_record/reflection.rb:422:in `compute_class'
activerecord (6.0.2.1) lib/active_record/reflection.rb:769:in `klass'
activerecord (6.0.2.1) lib/active_record/associations/association.rb:137:in `klass'
activerecord (6.0.2.1) lib/active_record/associations/collection_association.rb:35:in `reader'
activerecord (6.0.2.1) lib/active_record/associations/builder/association.rb:100:in `authors'
active_model_serializers (0.10.10) lib/active_model/serializer.rb:397:in `read_attribute_for_serialization'
active_model_serializers (0.10.10) lib/active_model/serializer/reflection.rb:168:in `value'
active_model_serializers (0.10.10) lib/active_model/serializer/lazy_association.rb:17:in `object'
active_model_serializers (0.10.10) lib/active_model/serializer/lazy_association.rb:50:in `serializer_class'
active_model_serializers (0.10.10) lib/active_model/serializer/lazy_association.rb:34:in `serializer'
active_model_serializers (0.10.10) lib/active_model/serializer/concerns/caching.rb:199:in `block (2 levels) in object_cache_keys'
active_model_serializers (0.10.10) lib/active_model/serializer.rb:357:in `yield'
active_model_serializers (0.10.10) lib/active_model/serializer.rb:357:in `block (2 levels) in associations'
active_model_serializers (0.10.10) lib/active_model/serializer.rb:352:in `each'
active_model_serializers (0.10.10) lib/active_model/serializer.rb:352:in `block in associations'
active_model_serializers (0.10.10) lib/active_model/serializer/concerns/caching.rb:197:in `each'
active_model_serializers (0.10.10) lib/active_model/serializer/concerns/caching.rb:197:in `each'
active_model_serializers (0.10.10) lib/active_model/serializer/concerns/caching.rb:197:in `block in object_cache_keys'
active_model_serializers (0.10.10) lib/active_model/serializer/collection_serializer.rb:7:in `each'
active_model_serializers (0.10.10) lib/active_model/serializer/collection_serializer.rb:7:in `each'
active_model_serializers (0.10.10) lib/active_model/serializer/concerns/caching.rb:194:in `object_cache_keys'
active_model_serializers (0.10.10) lib/active_model/serializer/concerns/caching.rb:179:in `cache_read_multi'
active_model_serializers (0.10.10) lib/active_model/serializer/collection_serializer.rb:25:in `serializable_hash'
active_model_serializers (0.10.10) lib/active_model_serializers/adapter/attributes.rb:14:in `serializable_hash'
active_model_serializers (0.10.10) lib/active_model_serializers/adapter/base.rb:61:in `as_json'
activesupport (6.0.2.1) lib/active_support/json/encoding.rb:35:in `encode'
activesupport (6.0.2.1) lib/active_support/json/encoding.rb:22:in `encode'
activesupport (6.0.2.1) lib/active_support/core_ext/object/json.rb:42:in `to_json'
active_model_serializers (0.10.10) lib/active_model_serializers/serializable_resource.rb:10:in `to_json'
active_model_serializers (0.10.10) lib/active_model_serializers/logging.rb:71:in `block (3 levels) in notify'
activesupport (6.0.2.1) lib/active_support/callbacks.rb:112:in `block in run_callbacks'
active_model_serializers (0.10.10) lib/active_model_serializers/logging.rb:24:in `block (3 levels) in instrument_rendering'
active_model_serializers (0.10.10) lib/active_model_serializers/logging.rb:81:in `block in notify_render'
activesupport (6.0.2.1) lib/active_support/notifications.rb:180:in `block in instrument'
activesupport (6.0.2.1) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (6.0.2.1) lib/active_support/notifications.rb:180:in `instrument'
active_model_serializers (0.10.10) lib/active_model_serializers/logging.rb:80:in `notify_render'
active_model_serializers (0.10.10) lib/active_model_serializers/logging.rb:23:in `block (2 levels) in instrument_rendering'
active_model_serializers (0.10.10) lib/active_model_serializers/logging.rb:97:in `block in tag_logger'
activesupport (6.0.2.1) lib/active_support/tagged_logging.rb:80:in `block in tagged'
activesupport (6.0.2.1) lib/active_support/tagged_logging.rb:28:in `tagged'
activesupport (6.0.2.1) lib/active_support/tagged_logging.rb:80:in `tagged'
active_model_serializers (0.10.10) lib/active_model_serializers/logging.rb:97:in `tag_logger'
active_model_serializers (0.10.10) lib/active_model_serializers/logging.rb:22:in `block in instrument_rendering'
activesupport (6.0.2.1) lib/active_support/callbacks.rb:121:in `instance_exec'
activesupport (6.0.2.1) lib/active_support/callbacks.rb:121:in `block in run_callbacks'
activesupport (6.0.2.1) lib/active_support/callbacks.rb:139:in `run_callbacks'
active_model_serializers (0.10.10) lib/active_model_serializers/logging.rb:70:in `block (2 levels) in notify'
actionpack (6.0.2.1) lib/action_controller/metal/renderers.rb:157:in `block in <module:Renderers>'
active_model_serializers (0.10.10) lib/action_controller/serialization.rb:72:in `block (2 levels) in <module:Serialization>'
actionpack (6.0.2.1) lib/action_controller/metal/renderers.rb:150:in `block in _render_to_body_with_renderer'
/home/chaimsh/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/set.rb:338:in `each_key'
/home/chaimsh/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/set.rb:338:in `each'
actionpack (6.0.2.1) lib/action_controller/metal/renderers.rb:146:in `_render_to_body_with_renderer'
actionpack (6.0.2.1) lib/action_controller/metal/renderers.rb:142:in `render_to_body'
actionpack (6.0.2.1) lib/abstract_controller/rendering.rb:25:in `render'
actionpack (6.0.2.1) lib/action_controller/metal/rendering.rb:36:in `render'
actionpack (6.0.2.1) lib/action_controller/metal/instrumentation.rb:44:in `block (2 levels) in render'
activesupport (6.0.2.1) lib/active_support/core_ext/benchmark.rb:14:in `block in ms'
/home/chaimsh/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/benchmark.rb:308:in `realtime'
activesupport (6.0.2.1) lib/active_support/core_ext/benchmark.rb:14:in `ms'
actionpack (6.0.2.1) lib/action_controller/metal/instrumentation.rb:44:in `block in render'
actionpack (6.0.2.1) lib/action_controller/metal/instrumentation.rb:85:in `cleanup_view_runtime'
activerecord (6.0.2.1) lib/active_record/railties/controller_runtime.rb:34:in `cleanup_view_runtime'
actionpack (6.0.2.1) lib/action_controller/metal/instrumentation.rb:43:in `render'
app/controllers/api/v1/users_controller.rb:8:in `index'
actionpack (6.0.2.1) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack (6.0.2.1) lib/abstract_controller/base.rb:196:in `process_action'
actionpack (6.0.2.1) lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack (6.0.2.1) lib/abstract_controller/callbacks.rb:42:in `block in process_action'
activesupport (6.0.2.1) lib/active_support/callbacks.rb:135:in `run_callbacks'
actionpack (6.0.2.1) lib/abstract_controller/callbacks.rb:41:in `process_action'
actionpack (6.0.2.1) lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack (6.0.2.1) lib/action_controller/metal/instrumentation.rb:33:in `block in process_action'
activesupport (6.0.2.1) lib/active_support/notifications.rb:180:in `block in instrument'
activesupport (6.0.2.1) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (6.0.2.1) lib/active_support/notifications.rb:180:in `instrument'
actionpack (6.0.2.1) lib/action_controller/metal/instrumentation.rb:32:in `process_action'
actionpack (6.0.2.1) lib/action_controller/metal/params_wrapper.rb:245:in `process_action'
activerecord (6.0.2.1) lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack (6.0.2.1) lib/abstract_controller/base.rb:136:in `process'
actionpack (6.0.2.1) lib/action_controller/metal.rb:191:in `dispatch'
actionpack (6.0.2.1) lib/action_controller/metal.rb:252:in `dispatch'
actionpack (6.0.2.1) lib/action_dispatch/routing/route_set.rb:51:in `dispatch'
actionpack (6.0.2.1) lib/action_dispatch/routing/route_set.rb:33:in `serve'
actionpack (6.0.2.1) lib/action_dispatch/journey/router.rb:49:in `block in serve'
actionpack (6.0.2.1) lib/action_dispatch/journey/router.rb:32:in `each'
actionpack (6.0.2.1) lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack (6.0.2.1) lib/action_dispatch/routing/route_set.rb:837:in `call'
rack (2.2.2) lib/rack/session/abstract/id.rb:266:in `context'
rack (2.2.2) lib/rack/session/abstract/id.rb:260:in `call'
actionpack (6.0.2.1) lib/action_dispatch/middleware/cookies.rb:648:in `call'
rack (2.2.2) lib/rack/etag.rb:27:in `call'
rack (2.2.2) lib/rack/conditional_get.rb:27:in `call'
rack (2.2.2) lib/rack/head.rb:12:in `call'
activerecord (6.0.2.1) lib/active_record/migration.rb:567:in `call'
actionpack (6.0.2.1) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport (6.0.2.1) lib/active_support/callbacks.rb:101:in `run_callbacks'
actionpack (6.0.2.1) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (6.0.2.1) lib/action_dispatch/middleware/executor.rb:14:in `call'
actionpack (6.0.2.1) lib/action_dispatch/middleware/actionable_exceptions.rb:17:in `call'
actionpack (6.0.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:32:in `call'
actionpack (6.0.2.1) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
railties (6.0.2.1) lib/rails/rack/logger.rb:38:in `call_app'
railties (6.0.2.1) lib/rails/rack/logger.rb:26:in `block in call'
activesupport (6.0.2.1) lib/active_support/tagged_logging.rb:80:in `block in tagged'
activesupport (6.0.2.1) lib/active_support/tagged_logging.rb:28:in `tagged'
activesupport (6.0.2.1) lib/active_support/tagged_logging.rb:80:in `tagged'
railties (6.0.2.1) lib/rails/rack/logger.rb:26:in `call'
actionpack (6.0.2.1) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
actionpack (6.0.2.1) lib/action_dispatch/middleware/request_id.rb:27:in `call'
rack (2.2.2) lib/rack/runtime.rb:22:in `call'
activesupport (6.0.2.1) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'
actionpack (6.0.2.1) lib/action_dispatch/middleware/executor.rb:14:in `call'
actionpack (6.0.2.1) lib/action_dispatch/middleware/static.rb:126:in `call'
rack (2.2.2) lib/rack/sendfile.rb:110:in `call'
actionpack (6.0.2.1) lib/action_dispatch/middleware/host_authorization.rb:83:in `call'
rack-cors (1.1.1) lib/rack/cors.rb:100:in `call'
railties (6.0.2.1) lib/rails/engine.rb:526:in `call'
puma (4.3.3) lib/puma/configuration.rb:228:in `call'
puma (4.3.3) lib/puma/server.rb:682:in `handle_request'
puma (4.3.3) lib/puma/server.rb:472:in `process_client'
puma (4.3.3) lib/puma/server.rb:328:in `block in run'
puma (4.3.3) lib/puma/thread_pool.rb:134:in `block in spawn_thread'

还有我的模特。对于我即将分享的模型,有更多的模型,但我想相关的是用户和作者。

class User < ApplicationRecord
has_secure_password
has_many :books
has_many :authors, through: :books
has_many :genres, through: :books
has_many :comments
# has_many :comments, through: :books
validates :username, uniqueness: true
end

现在是AUTHER

class Author < ApplicationRecord
has_many :books
has_many :genres, through: :books
end

由于它是正确的,我可以将其作为正确的答案而不是注释发布

由于查找Author类似乎有问题,您可以验证Author类的文件名吗?这样就不会意外地将其保存为app/models/authors.rb(复数而非单数(或其他什么。另外,试着明确地说

has_many :authors, through: :books, class_name: '::Author'

在User类中,只是看看它是否真的能显式地找到它,而不是推断出来的。

答案由@DanneManne发布在评论中。非常感谢。

--在User类中明确地说has_many:authors,through::books,class_name:"::Author",只是看看它是否真的可以显式地找到它,而不是推断它。

相关内容

最新更新