c’est bien cache_key pour les ActiveRecord, mais c’est encore mieux pour les collections d’ActiveRecord.
ActiveRecord::Base.class_eval do
def cache_key_with_extra_keys(*args)
extra = args.empty? ? '' : '-' + args.collect{|a| a.to_s }.join('-')
cache_key_without_extra_keys + extra
end
alias_method_chain :cache_key, :extra_keys
end
Array.class_eval do
def cache_key(*args)
keys = []
self.each do |item|
keys << (item.respond_to?(:updated_at) && item.respond_to?(:id) ? "#{item.id}-#{item.updated_at.to_s(:number)}" : item.object_id.to_s)
end
extra = args.empty? ? '' : '-' + args.collect{|a| a.to_s }.join('-')
return keys.join('-') + extra
end
end
comme ça, vous pouvez faire une cache key pour un ensemble :
last_articles = Article.find(:all,:limit => 5) last_articles.cache_key