2009-03-13 11 views
8

मैं रनटाइम पर ActiveRecord क्लास के assocations को ढूंढना चाहता हूं ...रन-टाइम पर ActiveRecord क्लास के लिए एसोसिएशन खोजें?

मान लें कि मेरे पास निम्न है:

class Person < ActiveRecord::Base 
    has_many :chairs 
    has_many :pens 
end 

class Chair < ActiveRecord::Base 
    belongs_to :person 
end 

class Pen < ActiveRecord::Base 
    belongs_to :person 
end 

मैं रनटाइम पर कैसे पता लगा सकता हूं कि व्यक्ति के पास "कई" कुर्सियां ​​हैं और पेन, और इसके विपरीत? मैं एक ऐसी विधि की तलाश में हूं जो तारों की एक सरणी लौटाएगी (यदि ऐसी विधि मौजूद है)। i.e.

Person.has_many_assocations 

वापस आ जाएगा:

["chairs", "pens"] 

और

Pen.belongs_to_associations 

वापस आ जाएगा:

["person"] 

क्या मुझे इस तरह की एक विधि याद आ रही है ??

आपकी मदद के लिए धन्यवाद।

उत्तर

25

मुझे लगता है कि ActiveRecord::Reflection कक्षा आप जो खोज रहे हैं वह हो सकती है। प्रलेखन से:

Account.reflect_on_all_associations    # returns an array of all associations 
    Account.reflect_on_all_associations(:has_many) # returns an array of all has_many associations 
0

रन-टाइम करने के लिए एक सुंदर मूर्ख चीज की तरह लगता है। आप वास्तव में क्या हासिल करने की कोशिश कर रहे हैं? मुझे लगता है कि आपकी समस्या जो भी हो, उसके लिए एक सरल और अधिक सामान्य रूप से उपयोग किया जाने वाला समाधान है।

यदि मुझे करना है, तो मैं TheModel.read_inheritable_attribute(:reflections) का उपयोग करूंगा।

+1

उहह ... सोचो रेक कार्य। एक जिसे संगठनों को जानना आवश्यक है। –

+0

मॉडल स्वयं संघों के बारे में जानते हैं। तो मैं अभी भी आपका पीछा नहीं कर रहा हूं;) –

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