Обращаюсь к рельсовикам. Предположим есть модель:
class Event
include Mongoid::Document
field :action, type: Symbol
field :actor_structure, type: Array
# и так еще штук 40 полей, то символов, то массивов
end
Каждое поле должно соответствовать значению из списка возможных. Для каждого поля свой список. В список часто добавляются новые значения. Первое, что приходит в голову, так это has_many и has_and_belongs_to_many. Но я боюсь, что это сильно замедлит выборку по модели и вообще, возможно даже анти-паттерн.
Можно оставить их как атрибуты создав соответствующие им модели, и для каждого атрибута написать кастомный валидатор. Хотя это тоже, скорее всего, анти-паттерн.