【问题标题】:How to share an array between two classes that inherit from different classes如何在从不同类继承的两个类之间共享数组
【发布时间】:2013-04-18 05:50:08
【问题描述】:

我有一个带有 PubSub 服务器 (Faye) 作为中间件的 Rails 应用程序。我有用于模型、视图和控制器的常用 Rails 结构,并且有一些用于 Socket 通道的控制器。 .(FayeRails提供)

问题: 我需要在我的套接字控制器和我的通用控制器之间共享一个客户端列表。 这是因为身份验证是通过 Rails 控制器完成的(所以我可以使用会话)..

通常我会把这种东西放在我的ApplicationController 中,这样所有继承的控制器和视图都可以访问它,但是套接字控制器是从FayeRails::Controller 继承的,所以这不是一个选项。我不知道在哪里这些控制器的实例 go.. 另外,我无法编辑初始化,因为所有控制器都是由 Rails 和 FayeRails gem 自动设置的。我尝试使用全局变量,但感觉不对。我也一直在考虑 ActiveRecord,但是将快速变化的数据添加到数据库中感觉不对。最后我想到了一个类似于 ActiveRecord 的类,它包含列表,但这感觉和全局一样..

我真的想不出在这两个控制器之间共享客户端列表的任何其他选项..

这样做的好方法是什么?

【问题讨论】:

  • 尝试过会话?或者也许是 Rails 缓存或 Redis?
  • 我没有在 Faye 控制器中遇到过任何会话使用情况,也从未使用过 Redis 或 Rails 缓存,但如果这就是解决这些问题的方法,我一定会检查一下!我会回来告诉你他们是如何工作的。谢谢!
  • Redis 是要走的路!感谢您的支持!

标签: ruby-on-rails controllers faye data-sharing


【解决方案1】:

你可以把你需要的东西放在 lib 目录下的一个模块中。将它包含在您的 application_controller 中,然后扩展主要的 FayeRails 控制器,也将模块包含在其中。要扩展,只需在您的控制器文件中创建一个具有相同名称的新的,可能确定类名相同,然后在您的 config/initializers/extensions.rb 文件中要求它。

例子

# config/initializers/extensions.rb
require "#{Rails.root}/app/controllers/whatever_controller.rb"

至于速度,是的,如果您担心我会考虑将您需要的东西保存在持久性 redis 数据库中。但如果 FayesRails 使用 ActiveRecord 方法,我不确定这会是多么容易/难。

【讨论】:

  • 我会先尝试 Redis,我想我可以避免使用 Faye 的 ActiveRecord 回调中的构建。谢谢!
  • 试用 Redis ATM,效果不错!我想我会将 redis 逻辑包装在 lib 文件夹中的一个模块中,以防应用程序增长以保持井井有条。所以,再次感谢!
猜你喜欢
  • 1970-01-01
  • 2013-02-25
  • 1970-01-01
  • 2018-06-20
  • 2016-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-25
相关资源
最近更新 更多