2012-10-14 16 views
8

मान लें कि मेरे पास मॉडल Doctor है, और एक मॉडल Patient है। एक Patient belongs_to a Doctorअभिभावक ऑब्जेक्ट के गुणों तक पहुंचने के लिए "रेल मार्ग" क्या है?

Doctor में एक विशेषता office है।

मैं, करना चाहते हैं एक Patient p दिया, p.office कहना और p के डॉक्टर की office उपयोग करने में सक्षम हो जाएगा।

मैं हमेशा एक विधि

class Patient 
    belongs_to :doctor 
    def office 
     self.doctor.office 
    end 

लिख सकता है लेकिन वहाँ Patient को Doctor की विशेषता तरीकों के सभी बेनकाब करने के लिए एक और अधिक स्वचालित तरीका है? शायद method_missing का उपयोग कर किसी प्रकार का कैच-सब तरीका है?

उत्तर

8

आप delegate इस्तेमाल कर सकते हैं।

class Patient 
    belongs_to :doctor 
    delegate :office, :to => :doctor 
end 

आपके पास एक प्रतिनिधि विधि में कई विशेषताओं हो सकती हैं।

class Patient 
    belongs_to :doctor 
    delegate :office, :address, :to => :doctor 
end 
+0

तो क्या होगा यदि 'कार्यालय' के अलावा, मेरे पास 10 अन्य गुण थे जिन्हें मैं 'डॉक्टर' को "प्रतिनिधि" देना चाहता था? क्या मुझे 10 'प्रतिनिधि' घोषणाएं लिखनी होंगी? – Tim

+0

@ टिम आप केवल एक लिख सकते हैं। – xdazz

+0

मैं देखता हूं, मैंने ध्यान से नहीं पढ़ा और महसूस किया कि आप प्रतिनिधि के लिए कई फ़ील्ड पास कर सकते हैं। धन्यवाद! – Tim

2

मुझे विश्वास है कि आप डॉक्टर के लिए एक प्रतिनिधि के रूप में रोगी का उपयोग करने के बारे में बात कर रहे हैं।

class Patient < ActiveRecord::Base 
    belong_to :doctor 

    delegate :office, :some_other_attribute, :to => :doctor 
end 

मुझे लगता है कि यह ऐसा करने का method_missing तरीका होगा:

def method_missing(method, *args) 
    return doctor.send(method,*args) if doctor.respond_to?(method) 
    super 
end 
संबंधित मुद्दे