Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用Rails 6 Zeitwerk时,同名类会导致未初始化常量_Ruby On Rails_Ruby_Ruby On Rails 6_Zeitwerk - Fatal编程技术网

Ruby on rails 使用Rails 6 Zeitwerk时,同名类会导致未初始化常量

Ruby on rails 使用Rails 6 Zeitwerk时,同名类会导致未初始化常量,ruby-on-rails,ruby,ruby-on-rails-6,zeitwerk,Ruby On Rails,Ruby,Ruby On Rails 6,Zeitwerk,我在无法访问另一个共享相同名称的models常量时遇到问题。例如: 在/app/models中,我有一个worker.rb文件,其中有一个常量RETRY\u COUNT class Worker < ApplicationRecord RETRY_COUNT = 10 end 我可以使用::worker调用worker模型类,但是当我调用::RETRY\u COUNT时,它会导致 NameError: uninitialized constant Worker (call 'Work

我在无法访问另一个共享相同名称的models常量时遇到问题。例如:

/app/models
中,我有一个
worker.rb
文件,其中有一个常量
RETRY\u COUNT

class Worker < ApplicationRecord
  RETRY_COUNT = 10
end
我可以使用
::worker
调用worker模型类,但是当我调用
::RETRY\u COUNT
时,它会导致

NameError: uninitialized constant Worker (call 'Worker.connection' to establish a connection)::RETRY_COUNT

不管怎么说,关于这个?我可以在
Critical::Worker
类上硬编码
重试\u COUNT
,但我希望避免这样做。

根据您的更新,我相当确定您具有循环依赖性
在“ApplicationRecord initialization”期间处理了许多调用。在“AR初始化”过程中,其中一个引用了a
中的
Critical::Worker.foo
,它引用了
::Worker
(AR)进行
重试计数,但尚未完成初始化

如果“AR初始化时间”需要此值,请将其放入没有其他依赖项的文件中

module Independent#此文件中没有其他依赖项
重试\u计数=10
结束
然后:

class Worker

然后,Zeitgeist应该能够确定它需要先加载
独立的
,然后再加载其他东西,比如AR类。

根据您的更新,我相当确定您具有循环依赖性
在“ApplicationRecord initialization”期间处理了许多调用。在“AR初始化”过程中,其中一个引用了a
中的
Critical::Worker.foo
,它引用了
::Worker
(AR)进行
重试计数,但尚未完成初始化

如果“AR初始化时间”需要此值,请将其放入没有其他依赖项的文件中

module Independent#此文件中没有其他依赖项
重试\u计数=10
结束
然后:

class Worker

然后,Zeitgeist应该能够确定它需要在加载任何其他东西之前(比如AR类)加载
独立的

::Worker.const\u get(:RETRY\u COUNT)
可能会有帮助?@JoshBrody,这不起作用。获取常量的任何方法都会导致相同的错误。我尝试过的备选方法是
::Worker.const\u get(:RETRY\u COUNT)
,这可能会有所帮助?@JoshBrody,但不起作用。不管怎样,在相同的错误选择中得到一个恒定的结果,我尝试了不幸的是,这两种方法都不起作用。第一个导致了
未初始化常量::RETRY\u COUNT
,第二个导致了Critical::Worker:Class(NoMethodError)的
未定义方法
RETRY\u COUNT',我可能应该提到RETRY\u COUNT是在类中的一个方法中调用的(比如
has\u many
),参见编辑的postOh,我想我知道发生了什么。用新信息更新了我的答案。不幸的是,这两个都不起作用。第一个导致了
未初始化常量::RETRY\u COUNT
,第二个导致了Critical::Worker:Class(NoMethodError)的
未定义方法
RETRY\u COUNT',我可能应该提到RETRY\u COUNT是在类中的一个方法中调用的(比如
has\u many
),参见编辑的postOh,我想我知道发生了什么。用新信息更新了我的答案。
NameError: uninitialized constant Worker (call 'Worker.connection' to establish a connection)::RETRY_COUNT