Ruby on rails 如何在构建ruby gem时要求类?
我正在创造一块宝石,以下是我的结构:Ruby on rails 如何在构建ruby gem时要求类?,ruby-on-rails,ruby,gem,Ruby On Rails,Ruby,Gem,我正在创造一块宝石,以下是我的结构: lib/ | myapp.rb | myapp/ | version.rb | configuration.rb | use_cases/ | base_use_case.rb | entity1/ | show_entity.rb spec/ myapp.gemspec 我想让我的类ShowEntity继承自BaseUseCase module MyApp::
lib/
| myapp.rb
| myapp/
| version.rb
| configuration.rb
| use_cases/
| base_use_case.rb
| entity1/
| show_entity.rb
spec/
myapp.gemspec
我想让我的类ShowEntity继承自BaseUseCase
module MyApp::UseCases::Entity1
class ShowEntity < BaseUseCase
end
end
模块MyApp::用例::Entity1
类ShowEntity
但是我得到了以下错误
in `<module:Entity1>': uninitialized constant MyApp::UseCases::Entity1::BaseUseCase (NameError)
“'”中的:未初始化常量MyApp::UseCases::Entity1::BaseUseCase(NameError)
在myapp.rb中,我需要每个类,但仍然得到错误
这是我第一次尝试真正理解模块和类是如何协同工作的,并且在gem项目中需要它们,因此任何关于我为什么会出现这种错误的帮助或解释都将非常有用。在您的代码中:
module MyApp::UseCases::Entity1
class ShowEntity < BaseUseCase
end
end
这里,当在当前范围中未找到BaseUseCase
时,搜索的封闭范围为MyApp::UseCases
。Ruby一次后退一个模块
语句,由于现在有一个单独的Entity1
声明,下一个范围是MyApp::UseCases
,而不是顶层。如果将BaseUseCase
直接定义在MyApp
下,那么此代码也不会工作,因为在MyApp::UseCases::Entity1
和MyApp::UseCases
下找不到它之后,下一个搜索范围将是顶层
要解决此问题,您应该根据上述需要分解您的模块
声明,或者明确定义BaseUseCase的完全命名空间名称
:
class ShowEntity < ::MyApp::UseCases::BaseUseCase
类ShowEntity<::MyApp::UseCase::BaseUseCase
您的类BaseUseCase似乎是MyApp::UseCase::BaseUseCase
而不是MyApp::UseCase::Entity1::BaseUseCase
在BaseUseCase
或MyApp::UseCase::BaseUseCase
class ShowEntity < ::MyApp::UseCases::BaseUseCase