代码之家  ›  专栏  ›  技术社区  ›  mbajur

如何将app subdir classess放在命名空间下

  •  0
  • mbajur  · 技术社区  · 7 年前

    我想将我的所有类命名为 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公司 ?

    2 回复  |  直到 7 年前
        1
  •  1
  •   jvillian    7 年前

    是什么 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 使用什么的描述 岗位 是(就像rails对 models , controllers 控制器 helpers ,和 mailers ,但不能与 模型

        2
  •  0
  •   RajG    7 年前

    通常,当你使用 namespace 您需要如下所示的文件结构:

    module Cms
      module Types
        class Post
        end
      end
    end
    

    EDIT: application.rb

    config.autoload_paths << Rails.root.join('app', 'cms').to_s
    
    推荐文章