如何从Rails中的Draper装饰器访问会话变量?

时间:2014-10-23 19:53:16

标签: ruby-on-rails session-variables decorator instantiation draper

我希望能够从Decorator访问会话变量。现在我不能这样做,也无法访问控制器实例变量,让我们说@session_variable

有没有一种干净的方法来实现这一目标?

谢谢!

1 个答案:

答案 0 :(得分:0)

当我需要控制器以外的任何对象来访问请求信息时,我喜欢使用我认为的Context模式。它看起来像这样:

编写一个单独的类,它只包含装饰器所需的接口(遵循接口隔离原则)。例如,让我们说装饰者需要知道用户是否已登录。使用实例方法LoginContext创建一个user_is_logged_in?单例。装饰者可以通过调用LoginContext.instance.user_is_logged_in?来确定用户是否已登录。

在您的before_filter添加ApplicationController,根据会话将单身人士的user_is_logged_in属性设置为truefalse,然后再运行行动。 (可选)如果要确保没有任何内容使用请求之外的LoginContext,请在运行操作后将过滤器设置为around_filter并将属性设置为nil,然后编写{ {1}}访问器,如果属性为nil,则会引发错误。

以上内容适用于单线程Rails应用程序服务器,但如果使用线程应用程序服务器,则可以围绕特定于线程的单例编写相同的功能。