如何覆盖狂欢控制器?

时间:2016-02-27 15:08:13

标签: ruby-on-rails

我在狂欢电子商务中更改了货币,现在我收到以下错误:

NoMethodError in Spree::OrdersController#populate
undefined method `+' for nil:NilClass

Extracted source (around line #116):


114        self.currency = currency
115        self.price    = variant.price_in(currency).amount +
116                        variant.price_modifier_amount_in(currency, opts)
117      else
118        self.price    = variant.price +
                        variant.price_modifier_amount(opts)

enter image description here

所以我想重写OrdersController 我看了这个: https://guides.spreecommerce.com/developer/logic.html 但我仍然感到困惑 - 我在哪里可以找到这个orderscontroller的初始代码?

2 个答案:

答案 0 :(得分:0)

问题不在于狂欢控制器。问题是:

variant.price_modifier_amount_in(currency, opts)

正在返回nil个实例。这就是你得到的原因:

undefined method `+' for nil:NilClass

答案 1 :(得分:0)

  

我在狂欢电子商务中更改了货币,现在我收到以下错误:

variant.price_modifier_amount_in(currency,opts)肯定会返回零。因此,您更改货币的方式是打破系统,尝试调试它。

  

所以我想重写OrdersController   如果你想重写部分OrdersController,你应该使用deface https://github.com/spree/deface

例如,您可以将order_controller_decorator.rb添加到app / controllers / spree / 使用以下代码

def update
  if @order.contents.update_cart(order_params)
    respond_with(@order) do |format|
      format.html do
        if params.has_key?(:checkout)
          @order.next if @order.cart?
          redirect_to checkout_state_path(@order.checkout_steps.first)
        else
          redirect_to cart_path
        end
      end
    end
  else
    respond_with(@order)
  end
end

此代码仅更改/覆盖更新功能。

如果要替换控制器中的所有内容,请在app / controllers / spree /中创建orders_controller.rb文件 然后添加您的代码。您可能希望参考original source code for order_controller