2011-03-12 14 views
5

में विधि के लिए कॉलबैक मेरे पास मॉडल समूह, सदस्यता और उपयोगकर्ता हैं। Has_many से जुड़ा हुआ है: एसोसिएशन के माध्यम से। रूट वार, सदस्यता समूह के अंदर घोंसला है।विभिन्न मॉडल

मुझे जो चाहिए वह यह है कि जब भी कोई समूह समूह में शामिल होता है या छोड़ देता है (यानी सदस्यता बनाने या नष्ट करने के लिए), समूह पर एक जांच शुरू करने के लिए यह जांचने के लिए कि डोमेन क्या है (यह उपयोगकर्ता मॉडल में एक विशेषता है) और समूह मॉडल में भाषा विशेषता अद्यतन करें।

मेरे पास समूह मॉडल में define_language नामक एक विधि है जो स्वतंत्र रूप से काम करने लगती है।

अब मैं सदस्यता मॉडल से इस विधि कॉल करने की जरूरत है, मैं कॉलबैक after_save यह करने के लिए सोच रहा था एक साथ, लेकिन मैं (अलग) समूह मॉडल में विधि करने के लिए इसे संदर्भित मुसीबत आ रही है।

मैंने इस विधि को समूह मॉडल में रखा है, न कि सदस्यता मॉडल जैसा कि मुझे लगता है कि सदस्यता के साथ इसका कोई संबंध नहीं है। क्या यह धारणा गलत है? मैं इस समस्या के बारे में एक कुशल तरीके से कैसे जाउंगा?

उत्तर

2

एक ही रास्ता है:

class Membership < ActiveRecord::Base 
    belongs_to :group 
    before_save :update_group_language 

    ... 

    private 

    def update_group_language 
    self.group.define_language 
    end 
end 

मैं यह कैसे काम कर सकता है, हालांकि नहीं देख सकते हैं:

class Membership < ActiveRecord::Base 
    belongs_to :group 
    before_save group.define_language 
end 

इसके साथ समस्या यह है कि संबंधित_to केवल रूबी द्वारा मूल्यांकन किया जाता है जब रेल पहली बार लोड होती है।

+0

यह उत्तर मेरे लिए काम किया! धन्यवाद – SupremeA

1

मैं यह पता लगा, तो आप सिर्फ Membership.rb

before_save group.define_language 

और Tadaa में चलाने के! यह Group.rb मॉडल में define_language को कॉल करेगा।

वैकल्पिक आप संबंध परिभाषित करने के लिए इस तरह के जोड़ सकते हैं:

before_save group.define_language "id = #{group_id}" 
+0

यह सही नहीं है, यह त्रुटि को "अपरिभाषित स्थानीय चर या विधि समूह" फेंक देगा और आप कॉलबैक में self.group को कॉल नहीं कर सकते हैं, इसलिए आपको कॉल को विधि के अंदर लपेटने की आवश्यकता है, जैसा कि उत्तर में दिखाया गया है @ cmrichards – rmcsharry

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