首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在不创建子模块的情况下将模型结构化为子文件夹的优雅方法

在不创建子模块的情况下将模型结构化为子文件夹的优雅方法
EN

Stack Overflow用户
提问于 2009-09-18 15:38:05
回答 9查看 26.2K关注 0票数 61

我的app/models文件夹中有很多模型。我想稍微清理一下这个文件夹。移动子文件夹中属于彼此的模型。问题在于,按照惯例,模型类被命名为相应的模块。

例如。

app/model/blog/post.rb

app/model/blog/comment.rb

app/model/user.rb

因此:

app/model/blog/post.rb

代码语言:javascript
复制
class Post < ActiveRecord
end

而不是

代码语言:javascript
复制
class Blog::Post < ActiveRecord
end
EN

回答 9

Stack Overflow用户

发布于 2011-01-25 22:41:10

下面是我在Rails 3中使用的代码:

代码语言:javascript
复制
config.autoload_paths += Dir[Rails.root.join('app', 'models', '{**}')]

这个配置告诉Rails递归地扫描所有app/Models子文件夹,并加载所有找到的模型。不需要命名空间。

票数 82
EN

Stack Overflow用户

发布于 2009-09-19 02:15:53

我们需要这样做,有一个非常简单的方法。

将模型移动到子文件夹中,然后告诉rails从environment.rb文件中的所有子文件夹加载文件:

代码语言:javascript
复制
config.load_paths += Dir["#{RAILS_ROOT}/app/models/*"].find_all { |f| File.stat(f).directory? }

不需要命名空间,模型可以在您的应用程序中正常引用

票数 12
EN

Stack Overflow用户

发布于 2014-03-19 06:01:41

我还创建子文件夹,然后将以下内容添加到application.rb文件中:

代码语言:javascript
复制
config.autoload_paths += Dir["#{config.root}/app/models/**/"]

但是,当子文件夹使用与模型相同的名称命名时,单独执行此操作是不够的(例如,包含多个文件的文件夹“user”,其中一个是“user”)。这在我的代码中导致了各种各样的错误,直到我发现它可以通过简单地为文件夹指定与它们包含的模型(例如,“用户模型”)不同的名称来解决。我在http://www.williambharding.com/blog/technology/rails-3-autoload-modules-and-classes-in-production/上找到了这个建议,它实际上指向了这个问题。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1445341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档