Ruby on Rails - 需要重新加载模型时的不一致性?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ruby on Rails - 需要重新加载模型时的不一致性?相关的知识,希望对你有一定的参考价值。

我找到了一些让我对Rails不熟悉的东西。我被告知每当我对模型进行更改时,我需要在控制台中执行reload!

我们假设在这两种情况之前我打电话给reload!

假设我有方案A,其模型具有特定的语法错误:

class Article < ActiveRecord::Base
  validator :title, presence: true
end

运行Article.new(title: "Test 1")会抛出一个NoMethodError,这是可以理解的。但是,如果我然后进入并修复错误,即使我不运行reload!,运行Article.new(title: "Test 1")现在也可以。

情景B,走向相反的方向。我有一个具有正确语法的模型:

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

运行Article.new(title: "Test 1")将没有错误,因为它应该。但是,如果我进去并将validates改为validator。如果我不运行reload!,尽管Article.new(title: "Test 1")文件有语法错误,运行article.rb仍然有效。直到我明确地运行reload!,我现在得到一个NoMethodError

这到底发生了什么?我知道这是非常具体的,但我不明白为什么会这样。似乎有时候你必须运行reload!来更新模型(比如场景B),有时候,就像在场景A中一样,你没有。

答案

在您的第一个示例中,Rails无法加载该类,因为它引发了错误。修复错误后,不需要重新加载类,因为之前没有成功加载类。

在第二个示例中,该类已成功加载。因此,您需要调用reload!告诉Rails将类重新加载到内存中。

以上是关于Ruby on Rails - 需要重新加载模型时的不一致性?的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails:无法加载rack / handler /

Ruby/Rails:重新打开与覆盖类

Ruby on Rails - 存储应用程序配置

Ruby on Rails 控制台在加载时挂起

Ruby on Rails 复数模型名称

Ruby on rails - 两次引用同一个模型?