有可能有这样的东西吗?
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+ 更新
从 Rails 4.1 开始,应用程序生成器默认不包含 config.autoload_paths
。因此,请注意,上述内容确实属于 config/application.rb。
更新
修复了上述代码中的自动加载路径示例,以使用 {*/}
而不是 {**}
。请务必阅读muichkine's comment有关详细信息。
关于ruby-on-rails - rails 4 : organize rails models in sub path without namespacing models?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18934115/