重新加载Rails控制台

35

关于使用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

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

2个回答

55

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

如果你有旧对象,这些对象在 reload! 之前被加载,则需要在这些单独的对象上调用 reload,或者找到新对象并与其一起使用,如果你想尝试新方法。

作为替代方案,我真的建议你考虑使用测试框架,例如 RSpec,它可以为你的应用程序提供可重复的测试和安全保障。

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


6

rails console在引用类后不会重新加载类。

如果它这样做,每个命令都需要向文件系统发出调用以找出哪些文件已更改。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接