【问题标题】:requiring lib/modules/file.rb in my app/services/service.rb file. How do I do this?在我的 app/services/service.rb 文件中需要 lib/modules/file.rb。我该怎么做呢?
【发布时间】:2015-03-14 03:33:57
【问题描述】:

我的 lib/modules/module.rb 文件夹中有一个模块,我的 app/services/service.rb 文件中有一个服务对象。我正在尝试访问我在 app/services/service.rb 文件中的服务对象的 module.rb 中定义的方法。我希望能够在 service.rb 中调用模块方法。

我写了这行:

config.autoload_paths += %W(#{config.root}/lib)

在我的 application.rb 文件中。我究竟做错了什么?我还需要做什么?

如果你需要的话,我的 service.rb 文件看起来像这样,是一个 PORO。

class FindTrip

  attr_reader :destination,
              :origin,
              :departure_date,
              :return_date,
              :max_price,
              :qpx_service

...

end

【问题讨论】:

  • 请告诉我们,您如何需要该文件。从这一点开始require 'modules/file' 应该可以解决问题。

标签: ruby-on-rails


【解决方案1】:

你应该:

1) 在自动加载路径中指定lib/modules 目录的路径:

    config.autoload_paths += %W(#{config.root}/lib/modules)

2) 在模块类中指定Modules 命名空间。即对于lib/modules/my_module.rb,它应该是:

    module Modules
      module MyModule
        ...
      end
    end

并使用模块的完整路径:Modules::MyModule

【讨论】:

  • 你能澄清第 2 点吗?同样,我的 app/services/service.rb 中有一个 lib/modules.module.rb 文件和一个服务对象。如何在我的 service.rb 文件中调用我的模块中的方法?
  • 在第二种情况下,您应该留下您的自动加载代码:config.autoload_paths += %W(#{config.root}/lib),并从您的服务中调用MyModule,例如:Modules::MyModule.module_method
猜你喜欢
  • 2012-05-26
  • 1970-01-01
  • 1970-01-01
  • 2019-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多