9
> rvm list
rvm rubies

=* ruby-1.9.2-p290 [ i686 ]
   ruby-1.9.3-p194 [ i686 ]

> rails -v
Rails 3.1.1

相关,但没有回答:是否有 Rails 控制台命令(Rails 3+)来重新加载更改的代码?

我正在使用 Rails 控制台尝试找出为什么我的模型中的方法没有被调用。该模型位于 ./app/models/product.rb 中。我正在将一种方法从被调用更改self.trim_historytrim_history. 我还在纠结何时调用方法 asself.do_stuff或 just do_stuff

好吧,在解决这个问题的过程中,我遇到了reload!. 我的理解是这reload!将再次加载所有模型和控制器,但这似乎不起作用。当我调试我的代码时,我更改为的行do_stuff仍然显示self.do_stuff在调试器中。

我试图用 解决这个reload!问题,没有修复。重新加载后我已经从数据库中重新加载了对象,没有修复。我已经直接用 加载了模型load './app/models/product.rb',然后从 db 加载了对象,没有修复。我已验证该对象正在更改为tail.

在 Rails 控制台中重新加载模型的最佳方法是什么?每次我的模型代码更改时,我是否必须重新启动控制台?有没有办法在不重新加载控制台的情况下转储所有现有模型及其代码?

编辑:这变得陌生。我现在怀疑我的代码正在重新加载,但调试器没有反映新代码。当我单步执行代码时,旧代码在那里,但正在执行新代码。我通过添加一个raise--raise在调试器中从不显示但它被提出来测试了这一点。笏?

我需要对调试器做些什么来让它看到重新加载的代码吗?这看起来像一个错误...

4

1 回答 1

21

reload!不会重新初始化现有对象,它只是重新加载代码。如果您创建该类的新实例,它应该反映更改。

于 2012-05-05T19:43:42.523 回答