如何从主应用程序访问Rails引擎方法?

时间:2012-06-21 10:05:27

标签: ruby-on-rails methods spree rails-engines

我正在尝试使用Spree :: Core引擎中定义的current_order方法: 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'

我也尝试过这些其他解决方案的排列:

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

但是我已经忘记了我实际做了什么。

有人可以指出我正确的方向吗?也许我错误地在上面的链接中实现了解决方案?

这是我在制作中遇到的错误:

2012-06-21T09:59:08 + 00:00 app [web.1]:ActionView :: Template :: Error(Spree :: Core :: CurrentOrder:Module的未定义方法`current_order'):

如果我用current_order注释掉代码行,那么一切都在生产中。

我认为这是生产中装载的方式吗?但这是我第一次尝试部署,所以我不太了解开发和生产之间的差异。

提前致谢!

1 个答案:

答案 0 :(得分:1)

这个问题有点陈旧,但这是一个可能的答案,记录。

也许您可以通过在控制器中使用一段狂欢代码来解决问题。在控制器中(或者,在Spree的情况下,在controller_decorator中)将代码放在视图中通常是更好的主意。

例如,如果您需要在产品视图中将其作为@current_order:

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

但我不知道为什么它在开发中而不是在生产中。