2010-11-10 98 views
9

什麼是讓(屬性已被分配,甚至之前)的活動記錄的屬性的類型的最佳方式?例如(這不起作用,只是目標):Ruby on Rails的活動記錄屬性自省

User.new 
User.inspect(:id)   # :integer 
User.inspect(:name)  # :string 
User.inspect(:password) # :string 
User.inspect(:updated_at) # :datetime 
User.inspect(:created_at) # :datetime 

謝謝!

回答

13

即使不具有所述模型的一個實例可以使用Model.columns_hash其是列的上鍵的屬性名稱在例如模型中的散列

User.columns_hash['name'].type # => :string 
User.columns_hash['id'].type # => :integer 
User.columns_hash['created_at'].type # => :datetime 

更新

作爲Kevin評論了自己,如果你有一個模型實例(例如@user),則column_for_attribute方法可以例如使用

@user.column_for_attribute(:name) # => :string 

Rails API docs你可以看到這僅僅是呼籲實例的類columns_hash包裝:

def column_for_attribute(name) 
    self.class.columns_hash[name.to_s] 
end 
+1

感謝邁克!這導致是:'@ user.column_for_attribute(:名稱).type'。正是我需要的! – 2010-11-10 15:40:30

+0

是的,如果你有你的模型的實例,然後'columns_for_attribute'甚至更好。我已經更新了答案,提到這一點。 – mikej 2010-11-10 21:03:51

0
Model.type_for_attribute('attr_name') # ActiveModel::Type::Value 
Model.attribute_types 
+0

任意一個關鍵詞與代碼走? – 2016-02-21 23:50:01