我想为我所有放在app/cms
模块下Cms
文件夹中的类命名空间。因此,假设我有一个以下文件:
# /app/cms/types/post.rb
class Cms::Types::Post
end
Rails假定放置在此目录中的文件的类定义应为Types::Post
,而不是Cms::Types::Post
。因此,当调用Cms::Types::Post.new
时,rails会抛出
LoadError (Unable to autoload constant Types::Post, expected /Users/xxx/workspace/personal/xxx/app/cms/types/post.rb to define it)
如何在Cms
下对所有这些文件进行命名空间?
我在5.2.0的轨道上
答案 0 :(得分:1)
什么是Post
?我的意思是Post
的本质是什么?例如,这是一项服务吗?
例如,如果它是一项服务,我将其放在:
/app/services/cms/types/post_service.rb
然后将其定义为:
class Cms::Types::PostService
end
如果它是一个type
(似乎是一个有问题的名称),那么我将在以下位置进行定义:
/app/types/cms/post_type.rb
并将其定义为:
class Cms::PostType
end
换句话说,使用/app
的描述在Post
下命名目录(就像rails对models
,controllers
等所做的描述一样),然后将描述(以单数形式)添加到定义的末尾(rails使用controllers
,helpers
和mailers
进行此操作,而不使用models
进行此操作)。 / p>
答案 1 :(得分:0)
通常,当您使用namespace
时,您需要具有以下文件结构:
module Cms
module Types
class Post
end
end
end
EDIT:
另外,要自动加载路径,可以在application.rb
中添加以下行:
config.autoload_paths << Rails.root.join('app', 'cms').to_s