如何使用插件的 "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,否则你只需要在你需要的文件中要求它。
我在 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,否则你只需要在你需要的文件中要求它。