-
Type: Task
-
Resolution: Done
-
Affects Version/s: None
-
Component/s: None
Consider a person with an account. A person can be successfully written to cache, but relationships cannot.
ruby require "spec_helper" describe ActiveSupport::Cache do let(:cache) do ActiveSupport::Cache::MemoryStore.new end describe "#fetch" do let!(:person) do Person.new end let!(:account) do person.create_account(name: "savings") end it "stores the parent object" do cache.fetch "key" do person end.should eq person cache.fetch "key" do end.should eq person end it "stores the embedded object" do cache.fetch "key" do account end.should eq account cache.fetch "key" do end.should eq account end end end
ActiveSupport::Cache #fetch stores the parent object (FAILED - 1) stores the embedded object (FAILED - 2) Failures: 1) ActiveSupport::Cache#fetch stores the parent object Failure/Error: cache.fetch "key" do TypeError: no _dump_data is defined for class Proc # ./spec/mongoid/cache_spec.rb:20:in `block (3 levels) in <top (required)>' 2) ActiveSupport::Cache#fetch stores the embedded object Failure/Error: cache.fetch "key" do TypeError: no _dump_data is defined for class Proc # ./spec/mongoid/cache_spec.rb:28:in `block (3 levels) in <top (required)>'
This gets worse in Rails, where with a FileStore you actually get no error depending on the cache store and the deserialized object is a String. With Dalli you get another error: {{ Unable to unmarshal value: instance of Mongoid::Relations::Referenced::One needs to have method }}marshal_load'`.