Bảng điều khiển Rails: tải lại! không phản ánh những thay đổi trong tệp mô hình? Lý do có thể là gì?


95

Trước đó nó đã hoạt động tốt. Tôi đã chơi một chút cấu hình. Vì vậy, có thể tôi đã vô tình thay đổi một số cấu hình.

đây là cấu hình của môi trường / phát triển.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'

Đây là phần cấu hình của 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

khi tôi chạy tải lại! trên bảng điều khiển rails nó trả về true

Câu trả lời:


181

reload!chỉ tải lại mã mới nhất trong môi trường bảng điều khiển. Nó không khởi tạo lại các đối tượng hiện có.

Điều này có nghĩa là nếu bạn đã khởi tạo bất kỳ đối tượng nào, các thuộc tính của chúng sẽ không được cập nhật - bao gồm cả các xác nhận mới được giới thiệu. Tuy nhiên, nếu bạn tạo một đối tượng mới, các thuộc tính của nó (và cả các xác nhận) sẽ phản ánh mã được tải lại. thêm ở đây


Điều gì về xác thực tùy chỉnh? Tôi đã xác định một số phương pháp và đăng ký với validate. Khi tôi thay đổi logic xác thực, nó không được phản ánh khi tải lại !.
Maddy.Shik

2
Nó sẽ phản ánh khi bạn khởi tạo lại đối tượng.
Nazar Hussain

19

Bạn đang tải lại đối tượng từ cơ sở dữ liệu?

Ví dụ:

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

'a' sẽ không phản ánh bất kỳ thay đổi nào đối với mô hình của bạn cho đến khi bạn tải lại từ db.


1
Lưu ý - điều này đúng ngay cả khi truy cập một phương thức trên một đối tượng. Ví dụ: nếu bạn thay đổi định nghĩa của phương thức lớp foo (), thì trong bảng điều khiển a.foo sẽ không sử dụng định nghĩa mới trừ khi bạn tải lại a lần đầu tiên.
jpw
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.