簡體   English   中英

如何將服務目錄添加到 Rails 中的加載路徑?

[英]How can I add a services directory to the load path in Rails?

在我的 Rails 項目中,我想在app文件夾中添加services目錄並包含一些服務對象。

所以假設我想添加app/services/foo/test.rb ,它看起來像:

module Services
  module Foo
    class Test

    end
  end
end

在我的config/application.rb我添加了:

config.paths.add File.join('app', 'services'), glob: File.join('**', '*.rb')
config.autoload_paths += Dir[Rails.root.join('app', 'services', '*')]

但是,當我嘗試在控制台中加載文件時,它不起作用:

⇒  rails c
Loading development environment (Rails 4.1.4)
[1] pry(main)> Services::Foo::Test
NameError: uninitialized constant Services

任何幫助我如何解決這個問題?

首先, app文件夾下的代碼將在沒有任何配置的情況下加載。

我認為問題是文件夾結構與您的類定義不匹配。

所以這個配置會起作用:

應用程序/服務/富/ test.rb

module Foo
  class Test
  end
end

我的線索是,例如我們有app/controllers/api/v1/users_controllers.rb ,類常量將是Api::V1::UsersController ,而不是Controllers::Api::V1::UsersController

更新

通常,我們通常使用FooServices代替Foo ,它更清晰,例如:

應用程序/服務/ foo_services / bar_parser.rb

module FooServices
  class BarParser
    # Do stuff
  end
end

所以我們理解foo_services文件夾中的每個類都是與Foo相關的服務

添加新目錄后,重新加載spring stop

我想我的問題是因為 Rails 命名約定。 我只是將類重命名為不使用module Services並且它起作用了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM