0

我正在使用独白宝石和设计宝石。

我正在使用 config autoload_paths 加载包含一些演示模型的子目录。

Rails 4:在没有命名空间模型的子路径中组织 Rails 模型?

应用程序/配置/应用程序.rb

config.autoload_paths += Dir[Rails.root.join('app', 'models', '{*/}')]

我相信,我的问题源于我需要覆盖 Monologue User 模型的时候。为此,我创建了一个本地文件

应用程序/模型/独白/user.rb

class Monologue::User < ActiveRecord::Base
    # code
end

我的应用程序的用户模型也位于

应用程序/模型/user.rb

class User < ActiveRecord::Base
    # code
end

我收到的错误是

ruby-2.1.5/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:481:in `load_missing_constant': 无法自动加载常量用户,预期 /Users/Shared/code/kindrdfood/RecRm/app/models /monologue/user.rb 来定义它(LoadError)

4

1 回答 1

1

您已将类命名空间的一部分包含到自动加载路径 ( app/models/monologue) 中。

只需保持自动加载路径不变。路径app/models已包含在内。如果给定的类名尚不存在,Rails 会尝试为给定的类名找到合适的文件。如果不修改加载路径,User应该自动加载app/models/user.rbMonologue::User应该自动加载app/models/monologue/user.rb

Rails 实际所做的是调用underscore您的类上的方法(分别是它的字符串表示形式)。因此,在 Rails 控制台上,您可以执行以下操作:

>> "Monologue::User".underscore
=> "monologue/user"

>> "User".underscore
=> "user"

编辑:

如果您想将自定义加载路径添加到 rails 的自动加载功能,我建议不要将它们放在已包含在列表中的文件夹中。也许是这样的:

config.autoload_paths << File.join(config.root, "app/decorators")
config.autoload_paths << File.join(config.root, "app/workers")
config.autoload_paths << File.join(config.root, "lib")
于 2016-04-14T18:33:32.030 回答