我将我的文件夹从 lib 移动到 rails 6 中的 /app,由于加载路径问题,我似乎仍然无法实例化对象

I moved my folder from lib to /app in a rails 6, I can't seem to instantiate an object still because of load path issue

我有一个新的 rails 6 应用程序,在 lib 文件夹中我有这个:

/lib/some_app_name/stripe/subscription/subscription_service.rb

module Someappname # Someappname is also in my application.rb 
  module Stripe
    class SubscriptionService
      def initialize(a)
        @a = a
      end
    end
  end
end

然后我将 'some_app_name' 文件夹移动到:

/app/some_app_name/stripe/subscription_service.rb

我了解到 /app 内的任何内容都会自动加载和重新加载,所以我搬到了这里。它在 /lib 中也不起作用。

在我的 home_controller.rb 中,我试过这个:

ss = Someappname::Stripe::SubscriptionService.new("a")

我收到一条错误消息:

uninitialized constant Someappname::Stripe::SubscriptionService

我做错了什么?

我怀疑是 spring,试试这个

bin/spring stop

然后启动 rails console,停止 Spring 将强制 Rails 重新加载您的应用程序

此外,

如果您的模块名称是 Someappname,那么目录名称应该是 app/someappname 而不是 some_app_name

希望对您有所帮助!

Rails 会自动加载 /app 下的所有内容,但有一个警告。第一级目录不会成为模块名称的一部分。这就是为什么您可以在 /app/models/user.rb 中包含 class User(而不是 class Models::User)。

解决方案:将您的代码放入 /app 下的 some 文件夹中。我通常称它为 /app/lib/app/custom 或类似的名称。

/app/custom/some_app_name/stripe/subscription/subscription_service.rb

(是的,请确保文件路径中的名称正确表示模块路径中的名称。模块 Someappname 不能有目录 some_app_name,但 [=20] 可以=])