2016-03-18 81 views
0

如何獲得所有類型的列表?
像例如,所有的字符串屬性的列表? 是否有一個簡單的Virtus解決方案,還是我必須推出自己的?如何獲取所有類型的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]

或有任何其他方式來獲取所有的字符串列表形式的屬性?

我的最終目標是能夠根據類型將各個屬性分爲不同的驗證。

回答

0

您可以沿着使用attribute_set方法與primitive獲取屬性類,然後你需要編寫自己的方法:

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] 

或者你可以去了一步,利用定義method_missing的是這樣的:̶

我希望這是你要找的。

+0

這是完美的迴應。真的希望我能給你無限票數。我可以問,使用方法丟失的做法有多好?我只是好奇,因爲我的其他開發人員對於進入應用程序的代碼非常頑固。使用它很常見嗎? –

+0

我更多地使用它作爲乾燥解決方案。我建議,因爲你想查詢不同的類,但說實話,在你的具體情況下,使用它會非常棘手,因爲你需要確保方法名具有ruby類名。與往常一樣,只要您一起做,代碼審查是與其他開發人員一起工作時最好的做法。 – miligraf

相關問題