Rails Console:リロード!モデルファイルの変更を反映していませんか?考えられる理由は何ですか?


95

以前は問題なく動作していました。私は少し設定を遊んでいます。知らないうちにいくつかの設定を変更した可能性があります。

ここにenvironment / development.rbの設定があります

  config.cache_classes = false

  # Log error messages when you accidentally call methods on nil.
  config.whiny_nils = true

  # Show full error reports and disable caching
  config.consider_all_requests_local       = true
  config.action_view.debug_rjs             = true
  config.action_controller.perform_caching = false

  # Don't care if the mailer can't send
  config.action_mailer.raise_delivery_errors = false

  # Print deprecation notices to the Rails logger
  config.active_support.deprecation = :log

  # Only use best-standards-support built into browsers
  config.action_dispatch.best_standards_support = :builtin

  # migration prefix with sequence #s
  config.active_record.timestamped_migrations = false

  #time zone
  config.time_zone = 'UTC'

ここにapplication.rbのconfigセクションがあります

 # Configure the default encoding used in templates for Ruby 1.9.
 config.encoding = "utf-8"

 # Configure sensitive parameters which will be filtered from the log file.
 config.filter_parameters += [:password]

 config.active_record.schema_format = :sql

リロードを実行すると!Railsコンソールではtrueを返します

回答:


181

reload!コンソール環境で最新のコードのみをリロードします。既存のオブジェクトは再初期化されません。

つまり、オブジェクトをすでにインスタンス化している場合、新しく導入された検証を含め、それらの属性は更新されません。ただし、新しいオブジェクトを作成する場合、その属性(および検証)は再ロードされたコードを反映します。 もっとここに


カスタム検証についてはどうですか?いくつかのメソッドを定義し、validateに登録しました。検証ロジックを変更しても、リロードには反映されません!。
Maddy.Shik

2
オブジェクトを再初期化すると反映されます。
ナザールフセイン

19

データベースからオブジェクトをリロードしていますか?

例えば:

>> a = User.last
=> #<User id: 16, email: "asdfadsf@sdfdsf.com">
>> reload!
Reloading...
=> true

'a'は、dbから再ロードするまで、モデルへの変更を反映しません。


1
注-オブジェクトのメソッドにアクセスする場合も同様です。たとえば、クラスメソッドfoo()の定義を変更した場合、最初にaを再ロードしない限り、コンソールではa.fooは新しい定義を使用しません。
jpw 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.