Как получить доступ к методам Rails Engines из основного приложения?

Я пытаюсь использовать метод current_order, определенный в движке Spree::Core: https://github.com/spree/spree/blob/master/core/lib/spree/core/current_order.rb

На мой взгляд, я пытался

Spree::Core::CurrentOrder.current_order

Использование только «current_order» в разработке работает нормально, но не в производстве.

Итак, я попытался потребовать это в своем файле представлений следующим образом:

require 'spree/core/current_order'

Я также пробовал перестановки этих других решений:

Как включить методы ApplicationController Rails Engine в основной приложение?

Способ добавить фильтр before_filter из движка в приложение

Rails 3.1: лучше способ показать помощника движка в клиентском приложении

Но я потерял след того, что я на самом деле сделал.

Может кто-нибудь указать мне в правильном направлении? Может быть, я неправильно реализовал решения в приведенных выше ссылках?

Это ошибка, которую я получаю в производстве:

2012-06-21T09:59:08+00:00 app[web.1]: ActionView::Template::Error (неопределенный метод `current_order' для Spree::Core::CurrentOrder:Module):

Если я закомментирую строки кода с помощью current_order, в продакшене все будет работать.

Я думаю, это то, как вещи загружаются в производство? Но это первый раз, когда я пытаюсь развернуть, поэтому я не совсем понимаю разницу между разработкой и производством.

Заранее спасибо!


person Zhao Li    schedule 21.06.2012    source источник


Ответы (1)


Этот вопрос немного устарел, но вот возможный ответ для записи.

Может быть, вы можете обойти это, используя фрагмент кода веселья в своем контроллере. Как правило, лучше иметь код в контроллере (или, в случае Spree, в controller_decorator), чем в представлении.

Например, если вам это нужно в представлении продуктов как @current_order:

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

Но я не знаю, почему он работает в разработке, а не в производстве.

person Mose    schedule 29.04.2013
comment
Спасибо за ответ. В итоге я продублировал код внутри помощника. - person Zhao Li; 29.04.2013