Как получить список всех атрибутов Virtus одного типа?
Как получить список всего одного типа?
Как, например, список всех атрибутов String? Есть ли простое решение Virtus или мне нужно накатить свое?
def my_model
include Virtus.model
attribute :a, Integer
attribute :b, Integer
attribute :c, String
attribute :d, String
attribute :w, Float
attribute :j, Float
end
Я хотел бы по существу сделать my_model.something = [:c, :d]
ИЛИ есть ли другой способ получить все атрибуты String в форме списка?
Моя конечная цель состоит в том, чтобы иметь возможность разделять атрибуты на различные проверки в зависимости от типа.
1 ответ
Решение
Вы можете использовать attribute_set
метод наряду с primitive
чтобы получить атрибут Class, а затем вам нужно написать свой собственный метод:
def self.get_string_attributes
attributes = []
self.attribute_set.each do |attribute|
attributes << attribute.name if attribute.primitive == String
end
attributes
end
Я получаю это результаты с вашим MyModel
:
MyModel.get_string_attributes
=> [:c, :d]
O̶r̶ ̶y̶o̶u̶ ̶c̶a̶n̶ ̶g̶o̶ ̶a̶ ̶s̶t̶e̶p̶ ̶f̶u̶r̶t̶h̶e̶r̶ ̶a̶n̶d̶ ̶u̶s̶e̶ ̶d̶e̶f̶i̶n̶e̶ ̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶
Я надеюсь, что это то, что вы ищете.