如何获取所有一种 Virtus 属性的列表?

How to get a list of all of one type of Virtus attribute?

如何获取所有类型的列表?
例如,所有 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]

或者是否有任何其他方法以列表形式获取所有字符串属性?

我的最终目标是能够根据类型将属性拆分为各种验证。

您可以使用 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̶a̶n̶g̶o̶a̶a̶a̶s̶s̶e̶p̶

希望这就是您要找的。