Я хочу найти чистый способ поддерживать перечисления как в базе данных, так и в модели.
Допустим, у меня есть класс ActiveRecord с постоянным перечислением типов
class Foo < ActiveRecord::Base
TYPES = {1 => :hello, 2 => :hi}
end
У меня естьпошел дальше и написал класс Enumeration, чтобы я мог сделать Foo :: TYPES.HELLO, чтобы получить 1, или Foo :: TYPES.HI, чтобы получить 2.
Я хочу эти типы в базе данных, чтобы я мог делать объединения,В настоящее время я создаю модель FooType, и у меня есть Foo assign_to: foo_type, поэтому у Foo будет поле foo_type_id.
class Foo < ActiveRecord::Base
belongs_to :foo_type # 1 -> hello, 2 -> hi
end
Однако это неудобно, потому что:
- Тестовые среды нарушаются, если я не заполняю тестовую базу данных каждый раз.Предполагается, что типы являются постоянными, поэтому они непосредственно используются в коде. Это, вероятно, самая большая боль
- Если я сделаю статическое перечисление, потянув foo_type_ids из БД в модель, это также сломает в тестах
- Если я добавлю новый типЯ должен отразить это в каждой базе данных
- Каждая среда должна быть заполнена с типами