Geo*_*old 7 ruby ruby-on-rails-3
我有一些Rails代码不能完全适合模型或控制器框.所以根据这个答案,我创建了一个app/classes
目录.Rails 3似乎自动将其添加到Rails中的"加载路径",我的应用程序正确地找到了我在那里定义的类,而不需要使用require
语句.
但是,代码输入app/classes
不会在开发模式下重新加载; 如果我进行更改,我需要重新启动服务器以查看更改.
在Rails 3.2.x中使给定目录"可重新加载"的正确方法是什么?这里有一些答案建议:
config.autoload_paths += %W(#{config.root}/app/classes)
Run Code Online (Sandbox Code Playgroud)
但我相信这仅仅具有添加app/classes
到初始目录集以查找代码的效果; 似乎并没有让它们为每个请求重新加载(而且在3.x中它似乎app/*
是自动添加的).
更新:
数字,我在发布问题后仅仅30秒就偶然发现了解决方案:
我让我的课程包含在一个模块中.一旦我删除了周围的"MyModule",它就突然变得可以重新加载了.来自Java背景,并且受到污染全局命名空间的Ruby代码的焚烧,我养成了将所有东西都放在模块中的习惯.我猜Rails"app"代码必须在任何模块之外生活吗?
您是在单独的文件中声明该模块,还是在类中隐式声明它?这可能会影响自动加载行为。module Foo; class Bar
与class Foo::Bar
. 如果 Rails 自动加载器找不到foo.rb
与 Foo 模块配合的模块,它可能会跳过重新加载它。
归档时间: |
|
查看次数: |
728 次 |
最近记录: |