Я давно искал гемы и / или плагины, которые реализуют статическое хранилище, подобное ActiveRecords, но не основаны на базе данных. Давайте назовем этот класс NonDBRecord. Оно должно иметь следующее свойство:
class Foo < NonDBRecord
add_item('a', :property1 => 'some value', :property2 => 'some more value')
add_item('b', :property1 => 'some value', :property2 => 'some more value')
end
class Bar < ActiveRecord::Base
belongs_to_nondbrecord :foo, :class_name => 'Foo'
end
# NonDBRecord declare constants automatically
[ Foo::A, Foo::B ]
# NonDBRecord is enumerable
Foo.all # returns [Foo::A,Foo::B]
# NonDBRecord is id-based
Bar.create(:foo_id => Foo::A.id)
# ...so you can search by it
x = Bar.find(:first, :conditions => { :foo_id => Foo::A.id })
# ...and is stored, retrieved, and instantiated by its id
x.foo # returns Foo::A
Я думал о том, чтобы просто использовать ActiveRecords (и хранилище базы данных), но мне это не нравится. Плюс ко всему, мне приходилось решать некоторые проблемы с загрузкой с помощью решения ActiveRecord. Буду признателен за любую помощь, прежде чем я начну писать свое собственное решение.
редактировать
Эти записи предназначены для перечисления. Например, скажем, вы делаете карточную игру. Я хочу быть в состоянии сделать что-то вроде
class Card < NonDBRecord
attr_reader :suit, :index
end
class Game
belongs_to :wild_card, :class_name => 'Card'
end