2013-04-17 5 views
0

У меня есть приложение Rails с PubSub Server (Faye) в качестве промежуточного программного обеспечения. У меня есть обычная Rails-структура для моделей, представлений и контроллеров, и у меня есть несколько контроллеров для моих Socket-каналов .. (Предоставлено FayeRails)Как распределить массив между двумя классами, которые наследуются от разных классов

проблемы: мне нужно разделить список клиентов между моими контроллерами сокетов и моими общими контроллерами. Это происходит потому, что аутентификация выполняется с помощью контроллера Rails (так я могу использовать сессии) ..

Обычно я хотел бы поставить такого рода вещи в моих ApplicationController так все унаследованные контроллеры и взгляды могут добраться до него, но контроллеры сокетов наследуются от FayeRails::Controller, так что это не вариант .. У меня нет подсказки, где идут экземпляры этих контроллеров. Также я не могу редактировать инициализацию, потому что все контроллеры автоматически настраиваются Rails и FayeRails gem , Я пытался использовать глобальные переменные, но это не так. Также я думал об ActiveRecord, но он не чувствует себя хорошо, чтобы добавлять быстро изменяющиеся данные в базу данных. Наконец, я, как класс ActiveRecord, список, но это чувствует себя так же, как глобальный ..

Я не могу думать о каких-либо других вариантов, чтобы разделить список клиентов между этими двумя контроллерами ..

что бы красивым и чистым способом делая это?

+0

Пробные сессии? Или, может быть, кеш-рельс или Редис? – omarvelous

+0

Я не сталкивался с использованием каких-либо сеансов в контроллерах Faye, никогда не использовал Redis или кеш Rails, но если так все будет решено, я обязательно их проверю! Я вернусь, чтобы вы знали, как они работают. Спасибо! –

+0

Redis - это путь! Спасибо за поддержку! –

ответ

0

Вы можете разместить то, что вам нужно, в модуле в каталоге lib. Включите его в свой прикладной контроллер, а затем расширьте основные контроллеры FayeRails, включите в него модуль. Чтобы расширить, просто создайте новый файл с таким же именем в файле контроллера, возможно, убедитесь, что имя класса одинаковое, а затем оно требуется в файле config/initializers/extensions.rb.

Пример

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

Что касается скорости, да, если вы беспокоитесь о том, что я хотел бы посмотреть на сохранение того, что вам нужно в постоянном REDIS БД. Но если FayesRails использует методы ActiveRecord, я не уверен, насколько это легко или сложно.

+0

Я попробую Redis первым, чем, я могу избежать использования встроенных обратных вызовов ActiveRecord для Faye, я думаю .. Спасибо! –

+0

Попытка банкомата Redis работает прямо! Я думаю, что собираюсь обернуть логику redis в модуле в папке 'lib', если приложение будет расти, чтобы все было организовано. Итак, еще раз спасибо! –