提问人:EastsideDev 提问时间:11/9/2023 最后编辑:AlexEastsideDev 更新时间:11/9/2023 访问量:88
在 Rails 7.1 中调用服务类方法时出错
Error calling a services class method in Rails 7.1
问:
轨道 7.1
在我的应用程序/服务/工具中,我有一个文件:services_tools.rb
在 services_tools.rb 中,我有:
module ServicesTools
class ErbToSlim
def convert_erb_to_slim(erb_file)
...........
end
end
class NestedMigrationCreator
def generate_nested_migration(migration_namespace:, migration_name:, migration_code: nil)
..........
end
end
end
我转到命令行,然后执行以下操作:
rails c
然后我做:
creator = ServicesTools::NestedMigrationCreator.new
我收到以下消息:
(irb):1:in `<main>': uninitialized constant ServicesTools (NameError)
在控制台中,当我这样做时:
ActiveSupport::Dependencies.autoload_paths
我得到:
"/lib",
"/test/mailers/previews",
"/app/channels",
"/app/controllers",
"/app/controllers/concerns",
"/app/helpers",
"/app/jobs",
"/app/mailers",
"/app/models",
"/app/models/concerns",
"/app/services",
...
有什么想法吗?
答:
5赞
Alex
11/9/2023
#1
Your 是一个根目录,这意味着相对于该目录的文件必须与模块/类名相对应才能自动加载:app/services
# app/services/tools/services_tools.rb
# '^^^' '^^^^^^^^^^^^'
# | |
module Tools # --' |
module ServicesTools # --'
end
end
这似乎有点尴尬。这可能会更好:
# app/services/tools/erb_to_slim.rb
module Tools
class ErbToSlim
end
end
# app/services/tools/nested_migration_creator.rb
module Tools
class NestedMigrationCreator
end
end
通常,最好为每个文件定义一个常量。但是,这也有效,只要文件名对应于类/模块名称,您就可以在里面执行任何操作:
# app/services/tools.rb
module Tools
class ErbToSlim
end
class NestedMigrationCreator
end
end
评论