私はRailsに慣れていないと思っていました。モデルに変更を加えるたびに、reload!
をコンソールで実行する必要があると言われました。Ruby on Rails - モデルをリロードする必要があるときの不一致?
これらの2つのシナリオの前にreload!
と呼んだとします。それは当然のことと同じようArticle.new(title: "Test 1")
は、NoMethodError
がスローされます実行
class Article < ActiveRecord::Base
validator :title, presence: true
end
:
はのは、私のような特定の構文エラーを持つモデルで、シナリオAを持っているとしましょう。しかし、私が入り込んでエラーを修正すると、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.rb
ファイルに構文エラーがあっても、Article.new(title: "Test 1")
を実行しても動作します。 を明示的に実行してからNoMethodError
を取得するまではありません。
ここでは何が起こっていますか?私はそれが非常に具体的であることを知っていますが、なぜこれが当てはまるのかわかりません。シナリオBのようにモデルを更新するためにreload!
を実行しなければならないことがありますが、シナリオAのように時々そうではありません。
ああ!ありがとうございました!したがって、最初に成功しないと、基本的に自動的に次の実行時に自動的にリロードされます。 – rb612
@ rb612はい。開発モードでは、Railsはデフォルトですべての定数をロードしません。どこでも参照されるとオンデマンドでロードされます。したがって、 'Article'に出会うと、この定数がメモリにロードされているかどうかをチェックし、そうでなければ' $ LOAD_PATH'にファイルの存在をチェックし、ロードされればそれをロードして定数を作成します'Article 'をコードに置き換えます。最初のケースでは、後者の部分が失敗したため、 'Article'定数は決して作成されなかったので、コードを修正して' Article.first'を再度実行すると、更新されたコードでクラスを正しくロードします。 – kiddorails