如何将会话变量从一个轨道3.2.8引擎传递到另一个引擎?

时间:2012-12-17 03:17:12

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

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

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

 mount Authentify::Engine => "/authentify"  

如何在会话rfqx中使会话变量可用?

1 个答案:

答案 0 :(得分:2)

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