【发布时间】:2014-07-04 10:10:23
【问题描述】:
我编写了一个生成器,它创建了以下 ruby 文件和文件夹:
app/tests/test.rb
在test.rb 文件中,我有一个Test 类,如下所示:
class Test < MyCustomModule::MyCustomClass::Base
...
end
现在,我想在 show.html.erb 文件之一中使用它的功能来创建这样的新实例:
Test.new(...).render(...).html_safe
但我收到以下错误:
uninitialized constant MyCustomModule::MyCustomClass::Base
我已使用以下 answer 链接我的 gem 和我的 rails 应用程序。它似乎可以使用生成器,但在 rails 应用程序中看不到 gem 模块和类。
谁能告诉我如何解决这个问题?
我已尝试按照 here 发布的提示进行操作,但仍然没有任何改变:
- 在
application.rb文件中添加config.autoload_paths += Dir["#{config.root}/lib/**/"] - 我已经创建了查看
CarrierWavegem 的 gem 结构,所以命名应该是正确的 -
我尝试禁用
config.threadsafe!,但它已经被禁用,因为config.cache_classes和config.eager_load在开发中被设置为false弃用警告:config.threadsafe!已弃用。导轨 默认情况下,应用程序在生产中的行为是线程安全的,只要 config.cache_classes 和 config.eager_load 设置为 true。
另外,查看adding-asset-to-your-gems rails 文档,据说:
Rails 附带的 jquery-rails gem 就是一个很好的例子 作为标准的 JavaScript 库 gem。这个 gem 包含一个引擎 从 Rails::Engine 继承的类。通过这样做,Rails 是 告知此 gem 的目录可能包含资产和 该引擎的 app/assets、lib/assets 和 vendor/assets 目录 被添加到 Sprockets 的搜索路径中。
所以,我已经这样做了,并将我的模型类文件放在assets 文件夹中,但结果是一样的。
以下截图展示了我的真实案例:
-
下面的截图显示了我的gem文件结构
-
在这里你可以看到我是如何在我的 Rails 应用程序中加载 gem 的
Gemfile:gem 'thumbnail_hover_effect', '0.0.3', github: 'thumbnail_hover_effec/thumbnail_hover_effec', branch: 'master' -
然后我使用 gem 生成器在
app/thumbnails/test.rb文件夹中使用带有 cuttom 名称的 ruby 文件,代码如下:class Test < ThumbnailHoverEffect::Image::Base ... end并尝试使用
Test类给我uninitialized constant ThumbnailHoverEffect::Image::Base错误。 -
回到 gem 文件,
thumbnail_hover_effect文件的样子require 'thumbnail_hover_effect/version' require 'thumbnail_hover_effect/engine' require 'thumbnail_hover_effect/image' module ThumbnailHoverEffect # Your code goes here... end然后锄
image文件看起来像:module ThumbnailHoverEffect # class Image ... end end
【问题讨论】:
-
你能提供真实世界的代码吗?确切的类名是什么,文件名是什么?您确定所有内容都已正确加载吗(我对此表示怀疑)。
-
@phoet 抱歉,重播晚了。我添加了一些真实的代码,如果您需要了解其他内容,请告诉我。
-
ThumbnailHoverEffect::Image::Base应该来自哪里? -
MyCustomModule::MyCustomClass::Base的定义在哪里? -
我的意思是,如果您有错误提示
uninitialized constant ThumbnailHoverEffect::Image::Base,您应该显示ThumbnailHoverEffect::Image::Base的代码以及它是如何包含在您的代码库中的。
标签: ruby-on-rails ruby ruby-on-rails-4 gem ruby-2.0