Spree Commerce扩展了帮助者

时间:2015-01-16 17:37:45

标签: ruby-on-rails ruby decorator spree

我正在尝试扩展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中),但基于我所遵循的教程,我觉得它是正确的。在大多数情况下,它似乎也能正常工作。

感谢任何帮助。

0 个答案:

没有答案