我有一个带有PubSub服务器(Faye)作为中间件的Rails应用程序..我有通常的模型,视图和控制器的Rails结构,而且我的Socket通道有一些控制器。 。(由FayeRails提供)
问题: 我需要在我的套接字控制器和我的通用控制器之间共享客户端列表。 这是因为身份验证是通过Rails控制器完成的(所以我可以使用会话)..
通常我会把这种东西放在我的ApplicationController
中,所以所有继承的控制器和视图都可以访问它,但套接字控制器是从FayeRails::Controller
继承的,所以这不是一个选项..我有不知道这些控制器的实例去哪里..而且,我无法编辑初始化,因为所有控制器都是由Rails和FayeRails gem自动设置的。我尝试使用全局变量,但这感觉不对。我也一直在考虑ActiveRecord,但是将快速变化的数据添加到数据库中感觉不对。最后我认为类似ActiveRecord的类可以保存列表,但这感觉与全球一样..
我无法想到在这两个控制器之间共享客户端列表的任何其他选项。
这样做会有什么好的和干净的方式?
答案 0 :(得分:0)
您可以将所需内容放在lib目录中的模块中。将它包含在application_controller中,然后扩展主要的FayeRails控制器,同时包含模块。要扩展,只需在控制器文件中创建一个具有相同名称的新名称,可以确保类名相同,然后在config / initializers / extensions.rb文件中要求它。
实施例
# config/initializers/extensions.rb
require "#{Rails.root}/app/controllers/whatever_controller.rb"
至于速度,是的,如果你担心我会考虑在持久的redis数据库中保留你需要的东西。但是如果FayesRails使用ActiveRecord方法,我不确定它会有多容易/多难。