81

有可能有这样的东西吗?

app/models/
app/models/users/user.rb
app/models/users/education.rb

目标是更好地组织/app/models文件夹,但不必为模型命名。

Rails 3 的一个未回答的问题在这里: Rails 3.2.9 and models in subfolders

使用命名空间指定 table_name 似乎可行(参见Rails 4 model subfolder),但我想在没有命名空间的情况下这样做

4

1 回答 1

117

默认情况下,Rails 不会将模型目录的子文件夹添加到自动加载路径中。这就是为什么它只能找到命名空间模型的原因——命名空间照亮了要查看的子目录。

要将app/models的所有子文件夹添加到自动加载路径,请将以下内容添加到config/application.rb

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

或者,如果您有一个更复杂的app/models目录,则上述将app/models的所有子文件夹组合在一起的方法可能无法正常工作。在这种情况下,您可以通过更加明确并仅添加您指定的子文件夹来解决此问题:

config.autoload_paths += Rails.root.join("app", "models", "<my_subfolder_name1>")
config.autoload_paths += Rails.root.join("app", "models", "<my_subfolder_name2>")

Rails 4.1+ 的更新

从 Rails 4.1 开始,应用程序生成器默认不包括在内config.autoload_paths。因此,请注意,以上内容确实属于config/application.rb

更新

修复了上述代码中的自动加载路径示例,以使用{*/}而不是{**}. 请务必阅读muichkine 的评论以了解详细信息。

于 2013-09-21T18:32:53.823 回答