gpt4 book ai didi

ruby-on-rails - Rails NameError 未初始化常量(模型和命名空间冲突)

转载 作者:行者123 更新时间:2023-12-04 07:39:24 25 4
gpt4 key购买 nike

我有一个名为 Organization 的模型.它在 app/models/organization.rb 中定义

class Organization < ActiveRecord::Base
... code
end

我有一个名为 Admin::Organization::ActivitiesController 的 Controller .它在 app/controllers/admin/organization/activities_controller.rb 中定义.它有一个索引操作。
class Admin::Organization::ActivitiesController < ApplicationController
def index
@organization = Organization.new
... more code
end
end

当我执行上述索引操作时,我收到以下消息:
NameError in Admin::Organization::ActivitiesController#index
uninitialized constant Admin::Organization::ActivitiesController::Organization

出于某种原因,它在 Controller 类中确定组织模型的范围。如果我更改 index使用方法
@organization = ::Organization.new

然后它工作正常。

这种行为似乎没有出现在 pry 控制台中。如果我添加一个 binding.pry调用index方法,然后我可以调用 Organization.new::Organization.new从命令行它工作正常。

应用程序中的所有其他模型都可以正常工作,并且没有这种奇怪的行为。我最初没有编写代码,所以我试图弄清楚发生了什么。

我认为它可能与 routes.rb 文件中的命名空间有关。有一个命名空间使用 organization单词。
namespace :admin do
namespace :organization
resources :activities
end
end

作为测试,我将命名空间更改为 :organizations ,而且我能够在不需要 :: 的情况下开始工作.有没有办法构造事物,或者路由设置,所以我们可以有一个 :organization 的命名空间不会干扰名为 Organization 的模型?

最佳答案

如果你只是想让路径正确,你不需要把事件 Controller 放在 admin/organization 下。命名空间文件夹。另一种选择是使用范围而不是命名空间。

# app/controllers/activities_controller.rb
class ActivitiesController < ApplicationController
def index
@organization = Organization.new
... more code
end
end

现在配置路由,
# config/routes.rb
scope 'admin/organization', path: 'admin/organization' do
resources :activities
end

这将产生这样的路线,
Prefix Verb   URI    Pattern                                      Controller#Action

activities GET /admin/organization/activities(.:format) activities#index
POST /admin/organization/activities(.:format) activities#create
......

关于ruby-on-rails - Rails NameError 未初始化常量(模型和命名空间冲突),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33089559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com