Rails Console: muat ulang! tidak mencerminkan perubahan dalam file model? Apa kemungkinan alasannya?

95

Sebelumnya itu berfungsi dengan baik. Saya telah memainkan sedikit config. Jadi mungkin saya telah mengubah beberapa konfigurasi tanpa disadari.

berikut adalah konfigurasi 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'

Berikut adalah bagian konfigurasi application.rb

 # 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

ketika saya menjalankan reload! pada konsol rel itu kembali benar

Maddy.Shik
sumber

Jawaban:

181

reload!hanya memuat ulang kode terbaru di lingkungan konsol. Itu tidak menginisialisasi ulang objek yang ada.

Ini berarti jika Anda telah membuat instance objek apa pun, atributnya tidak akan diperbarui - termasuk validasi yang baru diperkenalkan. Namun, jika Anda membuat objek baru, atributnya (dan juga validasinya) akan mencerminkan kode yang dimuat ulang. lebih lanjut di sini

Nazar Hussain
sumber
Bagaimana dengan validasi khusus? Saya telah menetapkan beberapa metode dan mendaftar dengan validate. Ketika saya mengubah logika validasi, itu tidak tercermin saat reload !.
Maddy.Shik
2
Ini akan tercermin saat Anda menginisialisasi ulang objek.
Nazar Hussain
19

Apakah Anda memuat ulang objek dari database?

Sebagai contoh:

>> a = User.last
=> #<User id: 16, email: "[email protected]">
>> reload!
Reloading...
=> true

'a' tidak akan mencerminkan perubahan apa pun pada model Anda sampai Anda memuatnya kembali dari db.

ctide
sumber
1
Catatan - ini benar bahkan saat mengakses metode pada objek. Misalnya, jika Anda mengubah definisi metode kelas foo (), maka di konsol a.foo tidak akan menggunakan definisi baru kecuali Anda memuat ulang file.
jpw