此扩展cache_find
为所有应用模型创建方法(我已使用此帖子创建此方法)。
配置/active_record_extension.rb
require 'active_support/concern'
module ActiveRecordExtension
extend ActiveSupport::Concern
# add your instance methods here
def flush_find
Rails.cache.delete([self.class.name, :cached_find, id])
end
included do
after_commit :flush_find
end
module ClassMethods
def cached_find id
Rails.cache.fetch([self.name, :cached_find, id]) { self.find(id) }
end
end
end
# include the extension
ActiveRecord::Base.send(:include, ActiveRecordExtension)
我把这段代码变成了一个 gem 并添加到这个repo中。
所以我想动态添加这个方法,像这样:
class User << ActiveRecord::Base
# id, name, email, age...
cached :find, :find_by_name, :find_by_email
end
上面的代码应该生成cached_find
, flush_find
, cached_find_by_name
, flush_find_by_name
... 你明白了。
我需要帮助:
- gem中的测试
Rails.cache
方法。model_caching
- 创建代码以根据
cached
方法参数向应用模型动态添加方法。
一些对我有帮助但并不完全满足的链接:
https://github.com/radar/guides/blob/master/extending-active-record.md
http://railscasts.com/episodes/245-new-gem-with-bundler
http://guides.rubyonrails.org/plugins.html
自由地克隆和改进gem 代码。