重新加载rails控制台

时间:2011-10-20 03:13:05

标签: ruby-on-rails irb

关于Rails控制台的使用,当我对模型进行一些更改时,我是否每次都需要重新加载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”方法调用?否则,我将收到错误,因为该属性尚未定义。为什么我们需要手动执行?

2 个答案:

答案 0 :(得分:44)

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

如果您在reload!之前有旧对象,则需要在这些单个对象上调用reload或查找新对象,并在尝试使用新方法时使用它们。

作为替代方案,我建议您考虑使用RSpec等测试框架,为您的应用提供可重复的测试和安全网。

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

答案 1 :(得分:6)

rails console引用之后重新加载课程。

如果确实如此,则必须调用文件系统来确定每个命令的文件都已更改。

另一方面,

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

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