Ruby on rails 如何为子文件夹中的对象提供服务
我的服务文件夹中有许多服务对象。我使用的是Rails 4:Ruby on rails 如何为子文件夹中的对象提供服务,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我的服务文件夹中有许多服务对象。我使用的是Rails 4: ->services a_gen.rb b_gen.rb ... a_pro.rb b_pro.rb ... 我希望我的文件夹结构类似 ->services ->gen a_gen.rb b_gen.rb ... ->pro a_pro.rb b_pro.rb ...
->services
a_gen.rb
b_gen.rb
...
a_pro.rb
b_pro.rb
...
我希望我的文件夹结构类似
->services
->gen
a_gen.rb
b_gen.rb
...
->pro
a_pro.rb
b_pro.rb
...
我试着只制作文件夹并将对象放在那里,但Rails抱怨找不到它。我必须告诉rails去那里看看吗
更新:
我得到这个错误:
NameError-未初始化的常量ExampleModelName::APro
即使路径已加载。一旦它位于子文件夹中。。Rails找错地方了。是的,你找错了。在
config/application.rb
中,您可以将子文件夹添加到config.autoload\u路径
集合中。是的,您可以这样做。在config/application.rb
中,您可以将子文件夹添加到config.autoload\u路径
集合中。您可以通过两种方式完成此操作
如果希望rails
在不修改config.autoload\u路径的情况下自动加载它们,请按照文件夹结构定义类,如下所示:
module Gen
class ServiceA
end
end
如果您不想对类定义进行任何更改,则可以将这些子文件夹添加到config.autoload\u路径中,如下所示,在config/application.rb
module YourApplication
class Application < Rails::Application
config.autoload_paths += [
"#{Rails.root}/app/services/gen",
"#{Rails.root}/app/services/prod"
]
end
end
模块应用程序
类应用程序
您可以通过两种方式实现
如果希望rails
在不修改config.autoload\u路径的情况下自动加载它们,请按照文件夹结构定义类,如下所示:
module Gen
class ServiceA
end
end
如果您不想对类定义进行任何更改,则可以将这些子文件夹添加到config.autoload\u路径中,如下所示,在config/application.rb
module YourApplication
class Application < Rails::Application
config.autoload_paths += [
"#{Rails.root}/app/services/gen",
"#{Rails.root}/app/services/prod"
]
end
end
模块应用程序
类应用程序
用于递归解决方案
# application.rb
config.autoload_paths += Dir["#{config.root}/app/services/**/"]
求一个递归解
# application.rb
config.autoload_paths += Dir["#{config.root}/app/services/**/"]
你能举个例子吗,我试过了,但它不起作用我试过config.autoload_paths+=%W(#{config.root}/services/gen)你能举个例子吗,我试过了,但它不起作用我试过config.autoload_paths+=%W(#{config.root}/services/gen哪种方法更好?这归结为个人选择。大多数情况下,我看到第二种方法比第一种方法使用得更频繁,因为当文件夹结构发生变化时,您不需要不断更新类。这对Rails 5仍然有效吗?对于那些来自OOP PHP背景的人来说,它似乎不适用于我,前者很像是给类命名。此外,您还可以在一个模块中动态获取所有类,这非常令人惊讶。它确实有助于“模块化”您的代码,在PHP中,您必须使用某种注册表模式。哪种方法更好?它归结为个人选择。大多数情况下,我看到第二种方法比第一种方法使用得更频繁,因为当文件夹结构发生变化时,您不需要不断更新类。这对Rails 5仍然有效吗?对于那些来自OOP PHP背景的人来说,它似乎不适用于我,前者很像是给类命名。此外,您还可以在一个模块中动态获取所有类,这非常令人惊讶。它确实有助于“模块化”您的代码,在PHP中,您必须使用某种注册表模式。这是否也会尝试将非文件夹添加到路径中?它会添加app/services
下的所有文件以及app/services
中任何子文件夹下的任何文件;这是否也尝试将非文件夹添加到路径中?它将添加app/services
下的所有文件以及app/services
中任何子文件夹下的所有文件;