如何使用插件的 "lib" 文件夹中的 类?

How to use classes from plugin's "lib" folder?

我在 Rails 4.2.3 中创建了插件,它的 "lib" 文件夹中也有一些 类:

lib/xxx/some_class.rb

接下来,我创建了应用程序并将该插件包含为 gem:

gem 'myplugin', path: "/path/to/plugin/myplugin"

不幸的是,SomeClass 在应用程序中不可见。

我想知道从插件的 "lib" 文件夹中包含那个和其他 类 的最佳方法是什么。我知道在应用程序的 application.rb 文件中我可以添加:

config.autoload_paths += Dir["/path/to/plugin/myplugin/lib/**/"]

但我不喜欢必须明确指定 "lib" 文件夹的完整路径。有更好的方法吗?

这应该是开箱即用的。看看ActiveRecord's lib/ tree,也有一个子目录。

我猜你没有指定 Rails' 为子目录自动加载设置的模块。

示例:即使 ActiveRecord 带有 class Base,但如果没有命名空间,class 将不可见。这就是您在模型中使用 ActiveRecord::Base 的原因。

如果您的插件将 class 放在 lib/my_plugin/some_class.rb 下,当您指定 MyPlugin::SomeClass 而不仅仅是 [=15] 时,Rails 会找到 class =].

在这种情况下,应该足够了:

require 'xxx/some_class'

在文件中使用您的SomeClass。为了让您深入了解捆绑器将为您做什么(和 Rails),他们将为您 require 中的文件 lib/yourplugin.rb,如果您 require 'xxx/some_class' 在该文件中,它将是 "autoloaded" in rails,否则你只需要在你需要的文件中要求它。