Spree 重写辅助方法

问题描述 投票:0回答:2

我正在尝试使用以下方法重写 base_helper.rb 的辅助方法:

module Spree
  module BaseHelper.class_eval do

    def taxons_tree(root_taxon, current_taxon, max_level = 1)
      .....
    end

  end
end

这对我不起作用。有人知道我在这里缺少什么吗?

谢谢!

已修复:

我应该使用:

Spree::BaseHelper.module_eval do

    def taxons_tree(root_taxon, current_taxon, max_level = 1)
      ...
    end

end

相反。

helper spree overriding
2个回答
22
投票

重新打开模块也可以正常工作:

module Spree
  module BaseHelper
   def taxons_tree(root_taxon, current_taxon, max_level = 1)
      ...
   end
  end
end

使用

class_eval
module_eval
没有什么特别的原因,这只是Spree项目中很长一段时间以来的习惯。


0
投票

定义装饰器模块。使用 Rails 7.1 和 Spree 4.9.0 进行测试。

app/helpers/spree/base_helper_decorator.rb

module Spree
  module BaseHelperDecorator
    def self.prepended(base)
      base.class_eval do
        def taxons_tree(root_taxon, current_taxon, max_level = 1)
          ...
        end
      end
    end
  end
end

Spree::BaseHelper.prepend(Spree::BaseHelperDecorator)
© www.soinside.com 2019 - 2024. All rights reserved.