我将我的文件夹从 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] 可以=])
我有一个新的 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] 可以=])