Вопрос по rails-engines, spree, ruby-on-rails, methods – Как получить доступ к методам Rails Engines из основного приложения?

3

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

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

Spree::Core::CurrentOrder.current_order

Используя просто & quot; current_order & quot; в разработке работает нормально, но не в производстве.

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

require 'spree/core/current_order'

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

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

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

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

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

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

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

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

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

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

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

Ваш Ответ

1   ответ
1

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

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

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

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

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

Спасибо за ответ. Я закончил тем, что продублировал код внутри помощника. A L

Похожие вопросы