aris
December 25, 2012, 1:16pm
1
I have such action in my controller:
def my
@user = Ads::User.find current_user.id
@postings =
Rails.cache.fetch("@user.postings.includes (:category)") do
@postings = @user.postings.includes(:category)
end
end
I’m trying to cache @postings and get such error:
Marshalling error for key ‘@user.postings.includes (:category)’: can’t
dump
anonymous class #Module:0x000000048f9040
You are trying to cache a Ruby object which cannot be serialized to
memcached.
If I try to cache @postings without includes there are no errors. Can’t
figure out what is the problem
Pavlo_S
December 25, 2012, 1:20pm
2
On Dec 25, 11:09am, Pavlo S. [email protected] wrote:
end
end
I’m trying to cache @postings and get such error:
This would try and cache the activerecord::relation object rather the
actual query results.
You need to force execution of the query, ie
Rails.cache.fetch(“@user.postings.includes (:category)”) do
@user.postings.includes (:category).to_a
end
Fred
Pavlo_S
December 25, 2012, 5:21pm
3
On Tue, Dec 25, 2012 at 5:09 AM, Pavlo S. [email protected]
wrote:
You are trying to cache a Ruby object which cannot be serialized to
memcached.
What is “includes” and what does it return? It should be a String,
Hash ({}), Array ([]), Fixnum (1), Range (1…2) or Float (1.0) for
Dalli to not bitch about Marshaling. Otherwise you have to build your
own Marshals for the object which might or might not be worth it.
Pavlo_S
December 25, 2012, 5:24pm
4
includes performs a join, and returns a ActiveRecord::Relation object.
Just call .to_a like Frederick C. says, and Dalli will be happy
–
Dheeraj K.