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

北慕城南 提交于 2020-06-01 07:15:05

问题


I have a new rails 6 application and in the lib folder I had this:

/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

I then moved the 'some_app_name' folder to:

/app/some_app_name/stripe/subscription_service.rb

I read that anything inside of /app will be autoloaded and reloaded so I moved in here. It wasn't working in /lib also.

In my home_controller.rb I tried this:

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

I get an error saying:

uninitialized constant Someappname::Stripe::SubscriptionService

What am I doing wrong here?


回答1:


I suspect it's spring, try this

bin/spring stop

And then start rails console, stopping Spring will force Rails to load your app fresh

Also,

if the name of your module is Someappname, then the directory name should be app/someappname and not some_app_name

Hope that helps!




回答2:


Rails does auto-load everything under /app, but there's a caveat. First level of directories is not becoming a part of module name. That's why you can have class User in /app/models/user.rb (and not class Models::User).

Solution: place your code into some folder under /app. I usually call it /app/lib or /app/custom or something like that.

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

(and yes, make sure that names in your filepath correctly represent names in your module path. You can't have directory some_app_name for module Someappname, but you can for SomeAppName)



来源:https://stackoverflow.com/questions/58681673/i-moved-my-folder-from-lib-to-app-in-a-rails-6-i-cant-seem-to-instantiate-an

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!