我创建了一个文件,命名为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
4条答案
按热度按时间2fjabf4q1#
Ruby on Rails需要遵循某些命名约定来支持自动加载。
如果模型/类结构是
Services::MyService
,那么Rails可以自动加载位于lib/services/my_service.rb
的文件。将您的
lib/services/my_service.rb
更改为:在控制器中使用该类,如下所示:
请注意,根据您的Ruby on Rails版本,您可能需要将
lib
文件夹添加到查找要自动加载的文件时查询的文件夹列表中:在Rails指南中阅读更多关于自动加载的信息。
ttp71kqs2#
您可能需要从
lib/
文件夹中的文件启用自动加载:如果您更喜欢“手动”执行此操作,则只能在同一个文件中要求这样的文件:
在此之后,需要重新启动。
332nm8kg3#
在config/application.rb中有一个设置,你可以在其中指定包含你想要自动加载的文件的目录。
从应用程序.rb:
或
轨道3
xytpbqjk4#
将其添加到您的应用程序.rb中