web-dev-qa-db-ja.com

Railsコンソールをリロードします

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」メソッド呼び出しを実行できるようにするたびに?そうしないと、属性が定義されていないため、エラーが発生します。なぜそれを手動で実行する必要があるのですか?

29
Sarun Sermsuwan

はい、reload!を呼び出す必要があります。これにより、ロードされたロード済み定数がクリアされ、コンソールで参照されているとおりにロードされます。

reload!より前の古いオブジェクトがある場合は、これらの個々のオブジェクトでreloadを呼び出すか、新しいオブジェクトを見つけて、新しいメソッドを試してみる必要があります。

別の方法として、繰り返し可能なテストとアプリケーションのセーフティネットを提供するRSpecなどのテストフレームワークを調べることを強くお勧めします。

アプリケーションの新機能のテストツールとしてコンソールを使用しようとしているようです。これは、RSpecの方が適しています。コンソールは実験に非常に適しています。

44
Ryan Bigg

Rails consolenotクラスが参照になった後にクラスをリロードします。

その場合、コマンドごとにどのファイルが変更されたかを把握するために、ファイルシステムを呼び出す必要があります。

一方、Rails serverは、開発モードのリクエストの間に変更されたクラスをリロードします。

Rails consoleの起動時間のため、コンソールを開いたままにしていると思います。アプリケーションが何であるかがわかりません。また、開発中にコンソールが開いている理由もわかりません。ただし、変更を確認しようとしている場合は、単体テストまたはrspecでテストすることをお勧めします。その時点で、sporkを使用して起動時間を短縮できます。

6
daicoden