Rails Console: โหลดใหม่! ไม่สะท้อนการเปลี่ยนแปลงในไฟล์โมเดล? สาเหตุที่เป็นไปได้คืออะไร?


95

ก่อนหน้านี้ใช้งานได้ดี ฉันเล่น config นิดหน่อย ดังนั้นฉันอาจเปลี่ยน config บางอย่างโดยไม่รู้ตัว

นี่คือ config ของ 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'

นี่คือส่วน config ของ 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

เมื่อฉันรีโหลด! บนรางคอนโซลมันคืนค่าจริง

คำตอบ:


181

reload!รีโหลดโค้ดล่าสุดในสภาพแวดล้อมคอนโซลเท่านั้น ไม่ได้เตรียมใช้งานวัตถุที่มีอยู่ใหม่

ซึ่งหมายความว่าหากคุณสร้างอินสแตนซ์อ็อบเจ็กต์ไปแล้วแอ็ตทริบิวต์จะไม่ได้รับการอัปเดตรวมถึงการตรวจสอบความถูกต้องที่เพิ่งเปิดตัว อย่างไรก็ตามหากคุณสร้างออบเจ็กต์ใหม่แอตทริบิวต์ (และการตรวจสอบความถูกต้องด้วย) จะแสดงโค้ดที่โหลดซ้ำ เพิ่มเติมที่นี่


การตรวจสอบความถูกต้องแบบกำหนดเองล่ะ ฉันได้กำหนดวิธีการบางอย่างและลงทะเบียนกับ validate เมื่อฉันเปลี่ยนลอจิกการตรวจสอบความถูกต้องจะไม่ปรากฏในการโหลดซ้ำ!
Maddy Shik

2
มันจะสะท้อนเมื่อคุณเริ่มต้นวัตถุใหม่
Nazar Hussain

20

คุณกำลังโหลดวัตถุใหม่จากฐานข้อมูลหรือไม่?

ตัวอย่างเช่น:

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

'a' จะไม่แสดงการเปลี่ยนแปลงใด ๆ ในแบบจำลองของคุณจนกว่าคุณจะโหลดใหม่จากฐานข้อมูล


1
หมายเหตุ - เป็นจริงแม้ว่าจะเข้าถึงเมธอดบนวัตถุ เช่นถ้าคุณเปลี่ยนนิยามของ class method foo () ดังนั้นในคอนโซล a.foo จะไม่ใช้นิยามใหม่เว้นแต่คุณจะโหลด a.
jpw
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.