【问题标题】:Best way to write initializers on a gem在 gem 上编写初始化程序的最佳方法
【发布时间】:2014-07-26 17:00:16
【问题描述】:

我正在编写我的第一个 gem,但初始化器部分存在一些问题。

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

根据这个帖子,他建议使用生成器 Rails how to create an initializer inside a 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

这并不好。

【问题讨论】:

    标签: ruby-on-rails ruby gem initializer railtie


    【解决方案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
    

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

    【讨论】:

    • 谢谢!似乎 to_prepare 在这里不是强制性的。所以你在 Railtie 上定义方法的方式是通过 class_eval。
    猜你喜欢
    • 2015-02-07
    • 2018-03-09
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 2015-12-02
    相关资源
    最近更新 更多