0

我正在写我的第一个 gem,我在初始化部分有一些问题。

所以我读到了 Railtie,我有点困惑,有一部分是关于初始化器和生成器的。

根据这个线程,他建议使用生成器 Rails 如何在 gem 中创建初始化程序

所以我不确定什么是最好的方法。

无论如何,我尝试做一些初始化程序,为 Jbuilder 添加一些方法

module MyGem
  class Railtie < Rails::Railtie
    initializer "my_gem.jbuilder_custom_cache" do |variable|
      class JbuilderTemplate
        def custom_cache!(resource, name, &block)
          fragment_cache_key = ::MyGem::Logic.cache_key(name, resource)
          options = { expires_in: 1.hour }
          cache!(fragment_cache_key, options, &block)
        end
      end
    end
  end
end

这效果不好。

4

1 回答 1

1

这是未经测试的,但我认为你可以这样做:

module MyGem
  class Railtie < Rails::Railtie
    config.to_prepare do
      JbuilderTemplate.class_eval do 
        def custom_cache!(resource, name, &block)
          fragment_cache_key = ::MyGem::Logic.cache_key(name, resource)
          options = { expires_in: 1.hour }
          cache!(fragment_cache_key, options, &block)
        end
      end
    end
  end
end

有关该块的更多信息,请参见此处(http://api.rubyonrails.org/classes/Rails/Railtie.html#class-Rails::Railtie-label-Configuration )。config.to_prepare

于 2014-06-05T18:31:50.260 回答