Rails cache_key et Array

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
Ce contenu a été publié dans Rails, Web Dev. Vous pouvez le mettre en favoris avec ce permalien.