浏览 1891 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-10-14
最后修改:2010-10-14
原帖作者:秦朝古月 ---- 关于原帖中的【产生了2个缓存】的解决方案: 当两个类是一对一的关系时,例子如下: class A < ActiveRecord::Base has_one :b acts_as_cached end class B < ActiveRecord::Base set_primary_key :a_id belongs_to :a acts_as_cached end A#b调用的时候使用的cache_id是b:#{b.id}, 也就是缓存中存在B:b:#{id}和B:#{id}两个同样值的cache; 当A的primary_key不仅仅是B的foreign_key,而且也是B的primary_key的时候,B:b:#{id}和B:#{id}两个cache的存在就失去了意义。 下面是改善方法(其他部分请参考原帖): class HasOneAssociation def find_target_with_cached_association # is the associated class using this class as it's cache id? if @reflection.klass.respond_to?(:get_cache) if(@reflection.klass.primary_key == @reflection.primary_key_name) cache_id = @owner.id else cache_id = "#{@reflection.primary_key_name}:#{@owner.id}" end @reflection.klass.get_cache(cache_id) { find_target_without_cached_association } else find_target_without_cached_association end end alias_method_chain :find_target, :cached_association end 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |