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

问题描述 投票:1回答:1

我找到了一些让我对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中一样,你没有。

ruby-on-rails ruby ruby-on-rails-4
1个回答
1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.