2010-11-10 18 views
9

सक्रिय रिकॉर्ड में विशेषता के प्रकार को प्राप्त करने का सबसे अच्छा तरीका क्या है (विशेषता को असाइन करने से पहले भी)? उदाहरण के लिए (यह काम नहीं करता है, केवल लक्ष्य):रेल पर सक्रिय रूबी सक्रिय रिकॉर्ड विशेषता आत्मनिरीक्षण

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 (: name) .type'। वास्तव में मुझे क्या चाहिए! –

+0

हाँ, अगर आपके पास अपने मॉडल का उदाहरण है तो 'column_for_attribute' भी बेहतर है। मैंने इसका उल्लेख करने के लिए उत्तर अपडेट किया है। – mikej

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

कोड के साथ जाने के लिए कोई भी शब्द? –

संबंधित मुद्दे