2011-03-12 102 views
14

是在轨道控制台(~ rails c)动态?例如;如果我打开控制台,然后对模型进行更改,它是否会选择这些更改,还是必须退出控制台并再次运行rails c才能获取模型中的更改?导轨控制台是否动态?

回答

35

您需要在控制台中调用reload!方法来重新载入更改。这种方法的魔法在开发模式下由rails server自动调用。

作为评论的指出下方,这里另一个答案,如果你改变的事情要做应用的环境,如添加新的宝石到Gemfile,在config做出改变任何东西,或添加新的插件那么你需要重新启动控制台。 app的任何更改将可以重新加载reload!

如果您正在使用此特定方式来测试某个方法正在工作,我不会。测试(如Test :: Unit或RSpec)变体更好,因为你有一种重复的方式来反复运行它们。 rails console非常适合一次性测试,但如果你想编写一个可维护的应用程序,然后编写测试。

+1

如果更改了宝石或插件,则需要退出并重新启动控制台; '重新加载!'不包括这些类型的东西。 – 2011-03-12 04:18:40

+3

这是一个不明显的例子。假设f是Foo类的一个实例。如果你改变Foo,输入'reload!',甚至是'f.reload',f.bar仍然不会更新。你需要重新分配Foo。至少,这就是它在Ruby 1.9.3p125和Rails 3.2.0上使用RVM的OS X Lion上的工作原理。 – Aaron 2012-03-24 21:21:16

+0

@Aaron,'f'在内存中,所以即使您更改数据库中的数据直到您重新分配它,它也不会更改。 – Ari 2015-04-02 01:16:41

1

正如Ryan指出的那样,您需要调用reload!重新加载更改。您还应该注意到一些更改要求您退出并重新启动控制台。这些更改包括更新配置或环境文件等内容(我不确定完整列表是什么)。