我创建了一个名为 lib/services/my_service.rb 的文件。
# /lib/services/my_service.rb
class MyService
...
end
我想在 app/controllers/my_controller 中使用它
class MyController < ApplicationController
def method
service = MyService.new()
end
我收到一个错误消息,指出 MyService 是一个未初始化的常量。我尝试用
导入它require '/lib/services/my_service.rb'
但是我得到了
cannot load such file -- /lib/services/my_service.rb
编辑:我尝试使用 application.rb 自动加载
config.autoload_paths << Rails.root.join('lib')
但是没有骰子。仍然得到未初始化的常量 MyController::MyService
最佳答案
Ruby on Rails 需要遵循特定的命名约定来支持自动加载。
如果模型/类结构是 Services::MyService
,Rails 可以自动加载位于 lib/services/my_service.rb
的文件。
将您的 lib/services/my_service.rb
更改为:
module Services
class MyService
# ...
end
end
然后在您的 Controller 中像这样使用该类:
service = Services::MyService.new
请注意,根据您的 Ruby on Rails 版本,您可能需要将 lib
文件夹添加到查找要自动加载的文件时查询的文件夹列表中:
# add this line to your config/application.rb:
config.autoload_paths << "#{Rails.root}/lib"
阅读更多关于 autoloading 的信息在 Rails 指南中。
关于ruby-on-rails - rails : Loading custom class from lib folder in controller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47119729/