【发布时间】:2014-12-11 22:29:21
【问题描述】:
我在 Rails 应用程序上下文中有 2 个问题:
我有一些不是“modele”的类,但在我的系统中需要,所以我想将它们分开
1)如何在 app/ 中添加“class”文件夹?(如果我创建并放置类,则不包括它们)
2)如何将文件夹“model”放在“app/class”文件夹中(这里也是一样,如果我移动它,模型不包括在内)
谢谢。
【问题讨论】:
标签: ruby-on-rails
我在 Rails 应用程序上下文中有 2 个问题:
我有一些不是“modele”的类,但在我的系统中需要,所以我想将它们分开
1)如何在 app/ 中添加“class”文件夹?(如果我创建并放置类,则不包括它们)
2)如何将文件夹“model”放在“app/class”文件夹中(这里也是一样,如果我移动它,模型不包括在内)
谢谢。
【问题讨论】:
标签: ruby-on-rails
有点不清楚你在问什么。
但是如果你想自动加载其他目录,你可以通过在 config/application.rb 中放置类似的内容来实现
config.autoload_paths << Rails.root.join('app/class')
但请不要将您的目录称为class,而是使用描述性的名称。
按照约定代码不适合模型、控制器、视图、帮助程序或关注点,并放置在项目根目录的 lib 目录中。
编辑:
您可以使用 glob 加载子目录:
config.autoload_paths << Rails.root.join('app/classes/**/')
【讨论】:
lib/ 文件夹的外部代码,例如服务和应用程序中的其他解耦模块/类。
Rails 已经自动加载了 /app 下的所有路径,如 here 所述
您在使用“app/class”目录时可能会遇到问题,因为“class”是保留字,而“Class”是 Ruby 中的一个类。
你的例子有问题:
示例:“app/classes/effects/attribute.rb”和“class Effect::Attribute”
请注意,文件路径中的“effects”末尾有一个“s”,而您的模块名称没有“Effect::Atttribute”。那些应该匹配。两者都以“s”结尾,当它们匹配时,Rails 自动加载应该可以工作。
您应该删除有关附加到 config.autoload_paths 的任何其他建议。
【讨论】:
models, controllers 等目录。