有可能有这样的东西吗?
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),但我想在没有命名空间的情况下这样做。
有可能有这样的东西吗?
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),但我想在没有命名空间的情况下这样做。
默认情况下,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 开始,应用程序生成器默认不包括在内config.autoload_paths
。因此,请注意,以上内容确实属于config/application.rb。
修复了上述代码中的自动加载路径示例,以使用{*/}
而不是{**}
. 请务必阅读muichkine 的评论以了解详细信息。