2011-10-20 108 views
27

关于使用Rails控制台,当我对模型进行一些更改时,是否需要每次都重新加载导航控制台以使更改反映出来?重新加载导轨控制台

例如,我有我的原代码如下:

class Article < ActiveRecord::Base 
    validates :title, :presence => true 
    validates :body, :presence => true 
end 

后来,我想添加一些额外的属性如下。

class Article < ActiveRecord::Base 
    validates :title, :presence => true 
    validates :body, :presence => true 

    def long_title 
    "#{title} - #{published_at}" 
    end 
end 

是否需要运行命令“reload!”每次都能够做“long_title”方法调用?否则,我会得到一个错误,说明该属性尚未定义。为什么我们需要手动执行该操作?

回答

44

是的,你需要调用reload!,因为这将清除已加载的加载常量,并将加载它们,因为它们在控制台中被引用。

如果您有来自reload!之前的旧对象,则需要针对这些单个对象调用reload或查找新对象,并且如果您想尝试新方法,请使用它们。

作为一种替代方案,我真的会推荐研究一下像RSpec这样的测试框架,它可以为您的应用程序提供可重复的测试和安全网。

看起来你正在尝试使用控制台作为应用程序中新功能的测试工具,这是RSpec更适合的。控制台非常适合实验。

4

rails console重载类,他们已经经过引用

如果这样做,它将不得不向文件系统发出一个呼叫,以确定每个命令哪些文件发生了更改。

rails server另一方面将在开发模式下的请求之间重新加载更改的类。

我猜你是因为rails console启动时间而保持控制台打开状态。我不确定你的应用程序是什么,并且不确定为什么控制台在开发期间是开放的。但是,如果您尝试验证更改,我可能会建议您使用单元测试或rspec进行测试,此时您可以使用spork加快启动时间。