3

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

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

 mount Authentify::Engine => "/authentify"  

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

4

1 回答 1

2

来自Rails Edge 指南

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 应用程序运行引擎。

于 2013-09-22T09:56:19.690 回答