ruby-on-rails - Rails 模块作为严格的命名空间

标签 ruby-on-rails ruby-on-rails-4 module namespaces

我对 rails 很陌生,我对模块在这里的工作方式有些困惑。我有一个这样的项目结构:

# app/models/foo.rb
class Foo < ActiveRecord

# lib/external_service/foo.rb
module ExternalService
  class Foo

# lib/external_service/bar.rb
module ExternalService
  class Bar
    attribute :foo, Foo # not the model
我以前使用过许多编码语言,我希望可以很容易地在 Bar 和 ExternalService 中像那样使用“Foo”,但是

LoadError: Unable to autoload constant Foo, expected lib/external_service/foo.rb to define it


ExternalService::Foo 通常甚至不应该在 ExternalService 之外可见,但整个项目都死在这件事上
我是否只是缺少一种“严格模式”符号或任何东西来确保我显然是指服务内部的 ExternalService::Foo 并防止服务杀死我的模型?
我知道我可以只添加模块,但我想让代码保持可读性。

最佳答案

所以你使用的是 rails 4

如果你想创建一个模块,首先你需要导入或自动加载你的 lib 文件夹

例如在 application.rb 中,您可以将 lib 文件夹添加到自动加载:

config.autoload_paths << Rails.root.join('lib')

之后,因为您使用的是 rails,您应该创建一个文件夹层次结构,其中包含模块层次结构的蛇形名称
例如,如果您有:
module ExternalService
  class Foo
    ...
  end
end

您的 foo.rb 文件应位于名为“external_service”的文件夹中
{{project_root}}/lib/external_service/foo.rb

文件夹层次结构是 rails 的约定。

关于ruby-on-rails - Rails 模块作为严格的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51132093/

相关文章:

模块和记录字段

javascript - 带有松散增强模块的 JSDoc 无法解析某些项目

ruby-on-rails - Rails 中的 validates_format_of (仅限数字、逗号和空格)

mysql - Rails 4应用程序中多个数据库之间的切换

ruby-on-rails - 测试失败 : association id should be mandatory

mysql - Rails where 子句将整数与数组匹配

ruby-on-rails - 缺少 application.yml 文件 - Atom 隐藏 vcs 忽略的文件

perl - 如何在 CPAN 上更新其他人的模块?

ruby-on-rails - 如何在 Rails 之外使用 Rails DateHelper 方法 time_ago_in_words?

ruby-on-rails - button_to :action => 'destroy' looks for 'show'