如何在rails控制台中重新加载模型?

时间:2012-05-05 19:19:36

标签: ruby-on-rails ruby ruby-on-rails-3

> rvm list
rvm rubies

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

> rails -v
Rails 3.1.1

相关,但没有回答:Is there a Rails Console command (Rails 3+) to reload changed code?

我正在使用Rails控制台尝试找出为什么我的模型中的方法没有被调用。该模型位于./app/models/product.rb中。我将方法从被调用为self.trim_history更改为trim_history。我还在用self.do_stuffdo_stuff方式调用方法。

在弄清楚这一点的过程中,我遇到了reload!的问题。我的理解是reload!会再次加载所有模型和控制器,但这似乎并没有起作用。当我调试代码时,我已更改为do_stuff的行仍在调试器中显示为self.do_stuff

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

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

编辑:这很奇怪。我现在怀疑我的代码正在重新加载,但调试器没有反映新代码。当我单步执行代码时,旧代码就在那里,但新代码正在执行。我通过添加raise测试了这一点 - raise从未在调试器中显示但是它被引发了。笏?

我是否需要使用调试器来查看重新加载的代码?这看起来像个错误......

1 个答案:

答案 0 :(得分:17)

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