has_many through:
관계가있는 ActiveRecord
개체를 캐시하려고하면 다시로드하거나 저장할 때까지 개체를 캐시 할 수 없습니다.has_many 통해 ActiveRecord 개체 캐시 :
person.rb :
class Person < ActiveRecord::Base
attr_accessible :name
has_many :person_locations
has_many :locations, through: :person_locations
has_many :person_items
has_many :items, through: :person_items
end
person_item.rb :
class PersonItem < ActiveRecord::Base
attr_accessible :item_id, :person_id
belongs_to :item
belongs_to :person
end
item.rb :
class Item < ActiveRecord::Base
attr_accessible :description
has_many :person_items
has_many :people, through: :person_items
end
콘솔 :
p = Person.create
p.items << Item.create
Rails.cache.write Time.now, p
=> false
#now if I save or reload p
p.save # or p.reload
Rails.cache.write Time.now, p
=> truthy
Marshal
단계에서 실패합니다. 따라서 Marshal.dump(p)
은 TypeError: can't dump hash with default proc
오류로 인해 실패합니다.
p
을 create
대신 new
을 사용하여 만들면 캐시에 쓸 수 있습니다.
p = Person.new
p.items << Item.new
Rails.cache.write Time.now, p
이 ActiveRecord
개체를 캐시하는 것이 실패한 이유는 무엇입니까?
레일 : 3.2.14
크루즈 : 2.7
루비 : 1.9.3-p392
도 참조 편집 : Dalli: You are trying to cache a Ruby object which cannot be serialized to memcached