我正在尝试扩展Spree Commerce提供的其中一个辅助模块。我遇到了以下文件:spree/frontend/app/helpers/frontend_helper.rb
最终我要做的是为这个模块添加一个简单的帮助方法。我计划将此帮助方法称为与单个产品页面一起使用。我的实现似乎在几个例外情况下工作正常,这让我相信我已经搞砸了。这就是我所做的:
我有文件app / helpers / spree / frontend_helper_decorator.rb。该文件的内容:
Spree::FrontendHelper.module_eval do
# Create Variant Matrix
def create_variant_matrix( variants )
@valid_variants = {}
...
@valid_variants
end
end
我接下来要做的是扩展Products Controller以覆盖其中一种方法。我创建了app/controllers/spree/products_controller_decorator.rb
。该文件的内容:
Spree::ProductsController.class_eval do
include Spree::FrontendHelper
# Overwrite Show to include variant matrix
def show
@variants = @product.variants_including_master.active(current_currency).includes([:option_values, :images])
@product_properties = @product.product_properties.includes(:property)
@taxon = Spree::Taxon.find(params[:taxon_id]) if params[:taxon_id]
@vMatrix = create_variant_matrix( @variants )
end
end
正如你在这里看到的,我已经覆盖了show方法,从默认的spree方法中复制了代码并添加了我的自定义调用。我还在控制器中包含了FrontendHelper
模块。
这没有任何错误,只有少数例外。例如,当我为了安装新的gem而运行bundle时,我通常会遇到一个错误,要求我在成功安装gem之前完全删除我的自定义FrontendHelper方法。一旦安装了gem,我就重新添加代码并且工作正常。我收到的错误是:
/fake/path/app/controllers/spree/product_controller_decorator.rb:2:in `block in <top (required)>': uninitialized constant Spree::FrontendHelper (NameError)
我试图没有运气地搜索此错误。我是Ruby的新手(背景是在PHP中),但基于我所遵循的教程,我觉得它是正确的。在大多数情况下,它似乎也能正常工作。
感谢任何帮助。