2016-02-27 6 views
0

Я изменил валюту в Шпрее электронной коммерции и теперь я получаю следующее сообщение об ошибке:Как переопределить контроллер spree?

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 Но я до сих пор путают - где можно Я нахожу исходный код для этого диспетчера заказов?

ответ

0

I changed currency in spree ecommerce and now I get the following error:

variant.price_modifier_amount_in (валюта, выбирает), безусловно, возвращая ноль. Таким образом, способ, которым вы изменили валюту, - это взломать систему, попробуйте отладить ее.

So I want to rewrite OrdersController if you want to rewrite part of OrdersController, you should use deface https://github.com/spree/deface

Например, вы можете добавить order_controller_decorator.rb в приложение/контроллеры/Шпрее/ со следующим кодом

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 

этот код изменится/переопределить только функцию обновления.

Если вы хотите заменить все в контроллере, создайте файл orders_controller.rb в приложении/контроллерах/spree/ , а затем добавьте свой код. вы можете получить ссылку от original source code for order_controller

0

Проблема не в контроллере spree. Проблема заключается в том, что:

variant.price_modifier_amount_in(currency, opts) 

возвращается в nil экземпляр. Вот почему вы получите:

undefined method `+' for nil:NilClass 
+0

в любом случае, где я могу получить код для этого контроллера? – user2950593

+0

Трассировка стека, вставленная в ваш вопрос (в первой строке), показывает путь к объекту, бросающему ошибку. Трассировка стека - ваш друг. Научитесь любить его. – jvillian

Смежные вопросы