रेल कंसोल: पुनः लोड करें! मॉडल फ़ाइलों में परिवर्तन को प्रतिबिंबित नहीं? क्या संभव कारण हो सकता है?


95

पहले यह ठीक काम कर रहा था। मैं थोड़ा बहुत विन्यास खेल रहा है। तो हो सकता है कि मैंने अनजाने में कुछ कॉन्फिग को बदल दिया हो।

यहाँ पर्यावरण / विकास का विन्यास है

  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

जब मैं पुनः लोड करता हूँ! रेल कंसोल पर यह सच है

जवाबों:


181

reload!केवल कंसोल वातावरण में नवीनतम कोड लोड करता है। यह मौजूदा वस्तुओं को फिर से शुरू नहीं करता है।

इसका मतलब यह है कि यदि आपने पहले से ही किसी ऑब्जेक्ट को इंस्टेंट कर दिया है, तो उनकी विशेषताओं को अपडेट नहीं किया जाएगा - जिसमें नए शुरू किए गए सत्यापन शामिल हैं। हालाँकि, यदि आप एक नई वस्तु बनाते हैं, तो इसकी विशेषताएँ (और सत्यापन भी) पुनः लोड किए गए कोड को दर्शाएंगे। यहां अधिक


कस्टम सत्यापन के बारे में क्या? मैंने कुछ तरीकों को परिभाषित किया है और मान्य के साथ पंजीकृत किया है। जब मैं सत्यापन तर्क बदलता हूं, तो यह पुनः लोड पर प्रतिबिंबित नहीं होता है!
मैडी.शिक

2
जब आप ऑब्जेक्ट को फिर से इनिशियलाइज़ करेंगे तो यह प्रतिबिंबित होगा।
नज़र हुसैन

19

क्या आप डेटाबेस से ऑब्जेक्ट को पुनः लोड कर रहे हैं?

उदाहरण के लिए:

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

जब तक आप इसे db से पुनः लोड नहीं करते, तब तक 'a' आपके मॉडल में किसी भी परिवर्तन को प्रतिबिंबित नहीं करेगा।


1
नोट - किसी वस्तु पर एक विधि तक पहुँचने पर भी यह सत्य है। उदाहरण के लिए, यदि आप वर्ग विधि foo () की परिभाषा बदलते हैं, तो कंसोल में a.foo नई परिभाषा का उपयोग नहीं करेगा, जब तक कि आप पहले पुनः लोड नहीं करते हैं a।
jpw
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.