对AssetTagHelper进行自定义更改到插件中

时间:2009-04-30 09:43:45

标签: ruby-on-rails plugins

我编写了一些自定义代码,可以对ActionView :: Helpers :: AssetTagHelper中的一些方法进行更改 一个例子:

module ActionView
  module Helpers
    module AssetTagHelper
      alias old_existing_method existing_method

      def existing_method
        puts "Does foobar"
        return old_existing_method
      end
    end
  end
end

现在通常我会将此代码保存在RAILS_ROOT / config / initializers / asset_helper_overrides.rb中 这可以按预期工作。

现在我想把它变成一个插件。

我将此文件复制到插件位置,我将在init.rb文件中要求它。 但是,这似乎不起作用。 我不确定为什么这不起作用。

我猜它可能是因为在需要ActionView :: Helpers之前需要该文件。不确定。

有人可以帮助我吗?谢谢。

1 个答案:

答案 0 :(得分:0)

我建议为此创建一个模块,并将您的模块包含在帮助程序中。这是一个例子:

module AssetTagExtensions
  def self.included(base)
    base.alias_method_chain :existing_method, :added_cleverness
  end

  def existing_method_with_added_cleverness
    puts "Does foobar"
    existing_method_without_added_cleverness
  end
end

然后,在init.rb文件中,您应该执行以下操作:

ActionView::Helpers::AssetTagHelper.module_eval do
  include AssetTagExtensions
end

ActionView::Helpers::AssetTagHelper类上调用module_eval(或send)非常重要,而不是重新打开它,以确保不会阻止它正确加载。