3

I'm trying to use the current_order method defined in the Spree::Core engine: https://github.com/spree/spree/blob/master/core/lib/spree/core/current_order.rb

In my view, I've tried

Spree::Core::CurrentOrder.current_order

Using just "current_order" in development works fine though, but not in production.

So then I've tried to require it in my views file like this:

require 'spree/core/current_order'

I've also tried permutations of these other solutions:

How to incorporate Rails Engine ApplicationController methods in a main app?

A way to add before_filter from engine to application

Rails 3.1: Better way to expose an engine's helper within the client app

But I've lost track of what I actually did.

Can someone please point me in the right direction? Maybe I implemented the solutions in the above links incorrectly?

This is the error I'm getting in production:

2012-06-21T09:59:08+00:00 app[web.1]: ActionView::Template::Error (undefined method `current_order' for Spree::Core::CurrentOrder:Module):

If I comment out the lines of code with current_order, everything works in production.

I'm thinking it's the way things are loaded in production? But this is the first time I'm trying to deploy so I don't quite understand the differences between development and production.

Thanks in advance!

Community
  • 1
  • 1
Zhao Li
  • 4,936
  • 8
  • 33
  • 51

1 Answers1

1

This question is a bit old, but here is a possible answer, for the record.

Maybe you can work around by using a piece of the spree code in your controller. It's generally a better idea to have the code in the controller (or, in the case of Spree, in a controller_decorator), than in the view.

For example if you need this in your products view as @current_order:

Spree::ProductsController.class_eval do
  @current_order = Spree::Order.find(session[:order_id])
end

But I don't know why it's working in development and not in production.

Mose
  • 876
  • 7
  • 7