【问题标题】:How to pass the session variables from one rails 3.2.8 engine to another engine?如何将会话变量从一个 rails 3.2.8 引擎传递到另一个引擎?
【发布时间】:2012-12-17 03:17:12
【问题描述】:

在我们的 rails 3.2.8 应用程序中,有一个可挂载的身份验证引擎,它处理用户身份验证并为整个应用程序生成会话变量。当我们将 authentify 与另一个 Rails 引擎 rfqx 集成时,引擎 rfqx 需要访问由引擎 authentify 生成的会话变量。问题是会话变量在引擎 rfqx 中不可用并且为零。

在rfqx的routes.rb中,authentify挂载如下:

 mount Authentify::Engine => "/authentify"  

我们如何使会话变量在引擎 rfqx 中可用?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3.2 rails-engines


    【解决方案1】:

    来自Rails Edge guide

    4.3.2 使用应用程序提供的控制器

    因为 Rails 控制器通常共享用于身份验证和访问会话变量之类的代码,默认情况下它们继承自 ApplicationController。然而,Rails 引擎的作用域是独立于主应用程序运行,因此每个引擎都有一个作用域 ApplicationController。此命名空间可防止代码冲突,但引擎控制器通常应访问主应用程序的 ApplicationController 中的方法。提供此访问权限的一种简单方法是将引擎的作用域 ApplicationController 更改为从主应用程序的 ApplicationController 继承。对于我们的 Blorgh 引擎,这将通过将 app/controllers/blorgh/application_controller.rb 更改为如下所示来完成:

    class Blorgh::ApplicationController < ApplicationController
    end
    

    默认情况下,引擎的控制器继承自 Blorgh::ApplicationController。因此,在进行此更改后,他们将可以访问主应用程序 ApplicationController,就好像它们是主应用程序的一部分一样。

    此更改确实要求引擎从具有 ApplicationController 的 Rails 应用程序运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多