- रेल: 3.0.3
- रूबी: 1.9.2
YAML.load
या Marshal.load
का उपयोग कर एक बहुत ही सरल वस्तु deserialize की कोशिश कर रहा एक भ्रष्ट पैदा करता है ऑब्जेक्ट क्योंकि वर्ग जो deserializing प्रक्रिया पर आवश्यक नहीं है।रेल YAML/मार्शल deserializing पर कक्षाओं लोड नहीं करता है वस्तुओं
उदाहरण:
# app/models/my_model.rb
class MyModel
attr_accessor :id
end
# test/unit/serializing_test.rb
require 'test_helper'
class SerializingTest < Test::Unit::TestCase
def test_yaml_serialize_structure
my_model = MyModel.new
my_model.id = 'my model'
File.open("#{Rails.root}/tmp/object.yml" , 'w') do |f|
YAML::dump(my_model, f)
end
end
def test_yaml_deserialize_structure
object = YAML.load_file "#{Rails.root}/tmp/object.yml"
assert(object.instance_of? MyModel)
assert_equal('my model', object.id)
end
end
इस कोड को हम किसी भी त्रुटि के बिना इस खोल कंसोल सत्र चला सकते हैं के साथ
:
$ ruby -Itest test/unit/serializing_test.rb -n test_yaml_serialize_structure
$ ruby -Itest test/unit/serializing_test.rb -n test_yaml_deserialize_structure
लेकिन अगर मैं अक्रमांकन एक रेल से कॉल सांत्वना वस्तु है चलाने उचित रूप से deserialized नहीं है क्योंकि कक्षा कभी आवश्यक नहीं है:
$ rails c
ruby-1.9.2-p0 > object = YAML.load_file "#{Rails.root}/tmp/object.yml"
=> #<Syck::Object:0x0000010322ea30 @class="MyModel", @ivars={"id"=>"my model"}>
मैं जानता हूँ कि केवल समस्या यह है कि वर्ग की आवश्यकता नहीं है क्योंकि अगर मैं इसे की आवश्यकता द्वारा हाथ सब कुछ काम करता है:
ruby-1.9.2-p0 > require "#{Rails.root}/app/models/my_model"
=> ["MyModel"]
ruby-1.9.2-p0 > object = YAML.load_file "#{Rails.root}/tmp/object.yml"
=> #<MyModel:0x0000010320c8e0 @id="my model">
मैं केवल YAML उदाहरण प्रस्तुत किया है लेकिन मार्शल के साथ बहुत ही है।
यह भी कहना है कि हालांकि मैं में समस्या का पुन: उत्पन्न कर रहा हूं हालांकि रेल कंसोल मूल रूप से यह समस्या मुझे मेरे आवेदन के सामान्य अनुरोध में पागल कर रही थी।
तो सवाल यह है कि: मैं रेल में वस्तुओं को deserialize कैसे कर सकते हैं बिना मेरे सभी वर्गों को हाथ से आवश्यकता है?
धन्यवाद
च।
मैं सिर्फ एहसास हो गया है कि एक ** विकास के वातावरण में यह केवल happend **। – fguillen
मैं देख रहा हूं कि अगर मैं सक्रिय 'config.cache_classes' को deserialization अच्छी तरह से काम करता है, लेकिन निश्चित रूप से: ** मैंने क्लास ऑटो रीफ्रेशिंग ** खो दिया है:/ – fguillen