【问题标题】:How to access Rails Engines methods from main application?如何从主应用程序访问 Rails 引擎方法?
【发布时间】:2012-06-23 13:16:15
【问题描述】:

我正在尝试使用 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 注释掉代码行,一切都可以在生产环境中运行。

我认为这是在生产中加载事物的方式?但这是我第一次尝试部署,所以我不太了解开发和生产之间的区别。

提前致谢!

【问题讨论】:

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


    【解决方案1】:

    这个问题有点老了,但这里有一个可能的答案,记录在案。

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

    例如,如果您在产品视图中需要这个@current_order:

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

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

    【讨论】:

    • 感谢您的回答。我确实最终在帮助程序中复制了代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多