ruby-on-rails - rails : Loading custom class from lib folder in controller

标签 ruby-on-rails ruby ruby-on-rails-5

我创建了一个名为 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/

相关文章:

ruby-on-rails - 禁用设备的 session

mysql - Ruby on Rails : Two Models Both Have Has/Many and Belongs_to

ruby-on-rails - Rails 加载我的@items n*n 次

ruby-on-rails - 在 Rails 中创建后打印对象属性

ruby-on-rails - 如何确定在 Rails 中选择哪个异常处理程序 resume_from?

ruby-on-rails - 排序多态关联的最佳方法

ruby - Ember.js、Rails 和通配符子域

ruby-on-rails - 如果以 'null' 作为源请求页面,则链接不起作用

ruby-on-rails - 如何使用params.fetch强参数

ruby-on-rails - Ruby on Rails 中用于客户端服务器的正则表达式