Я пытаюсь создать что-то (в конечном счете, драгоценный камень, но теперь приложение), которое работает следующим образом.
Предположим, например, записи БД - это породы собаки. Там родительский класс собаки и дочерний класс для каждой породы. Фактические породы неизвестны до времени выполнения.
При запуске сервера он будет загружать записи из БД и создавать экземпляры классов на основе записей, например. У меня могут быть два гончих и пудель. Когда кто-то приходит на сервер, они могут захотеть получить доступ к одному из этих экземпляров.
Почему бы просто не создать экземпляр "на лету"? В моем случае "собаки" - это в основном классы, которые содержат алгоритм и данные. Алгоритм не изменяется, данные редко изменяются (порядка суток), но выполнение самого алгоритма, в котором используются как данные, так и некоторые динамические данные, передаваемые, например, временная метка, будут доступны несколько раз в секунду.
Было бы глупо воссоздать экземпляр объекта и каждый раз загружать данные, просто чтобы сделать запрос, только чтобы сделать это снова при следующем запросе (запросы не изменяют состояние объекта). Я бы создавал и уничтожал несколько объектов в секунду, когда мог просто повторно использовать один и тот же объект.
нет смысла держать его в сеансе, так как человеку, желающему пуделя, не нужно иметь информацию о биглях в ее объекте сеанса; он не имеет значения (и не масштабируется).
Как сохранить эти объекты в памяти? Я в основном хочу, чтобы таблица поиска содержала экземпляры. В Java я бы создал синглтон с некоторым типом hashmap или массива, который сидит в памяти. В rails я попробовал это, создав класс singleton в папке lib. Я думаю - я, возможно, не понимаю этого права, - что экземпляр (тот факт, что он синглтон спорный) теряется, когда сеанс исчезает.
Самый близкий ответ, который я нашел, был http://www.ruby-forum.com/topic/129372, который в основном помещает все в поля и методы класса. Почему-то это не кажется правильным.
ТИА!
Дополнение: Я прихожу из Java. В Java я просто создаю объект, который находится в куче или, может быть, в дереве JNDI, и по мере того, как появятся HTTP-запросы, они будут обрабатываться сервлетом или EJB или некоторым элементом для запроса, который затем может получить доступ к постоянному объекту. Я не могу найти эквивалент в рельсах.