【问题标题】:Reload the rails console重新加载 rails 控制台
【发布时间】:2011-10-20 03:13:04
【问题描述】:

关于 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”方法调用吗?否则,我将收到一条错误消息,说明该属性尚未定义。为什么我们需要手动执行?

【问题讨论】:

    标签: ruby-on-rails irb


    【解决方案1】:

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

    如果您有 reload! 之前的旧对象,您需要在这些单独的对象上调用 reload,或者如果您想尝试新方法,请找到新对象并使用它们。

    作为替代方案,我真的建议您研究一个测试框架,例如 RSpec,它可以为您的应用程序提供可重复的测试和安全网。

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

    【讨论】:

      【解决方案2】:

      rails console在类被引用后重新加载它们。

      如果是这样,它必须调用文件系统来确定每个命令都更改了哪些文件。

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

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

      【讨论】:

        猜你喜欢
        • 2012-08-04
        • 1970-01-01
        • 2011-11-27
        • 1970-01-01
        • 2011-09-15
        • 2017-03-18
        • 2011-06-11
        • 2011-10-29
        • 1970-01-01
        相关资源
        最近更新 更多