रेल अनुप्रयोगों में बहु-किरायेदारी के कई उदाहरण खोजने के बावजूद, जब मैंने पहली बार इसे करने के लिए निर्धारित किया, तो मुझे ऐसा कोई नहीं मिला जिसने मुझे पूरी तरह से सहज महसूस कराया। लेकिन आखिरकार मेरे पास एक समाधान है जिससे मैं खुश हूं।
मैंने 'मल्टीटेनेंसी विद स्कोप' रेलकास्ट के साथ शुरुआत की थी
http://railscasts.com/episodes/388-multitenancy-with-scopes ए>
फिर इस गाइड का उपयोग करके वसीयत उप डोमेन के साथ बहु-किरायेदारी कार्य करने पर ध्यान दिया:
https ://github.com/plataformatec/devise/wiki/How-To:--Isolate-users-to-log-into-a-single-subdomain
लेकिन मैंने इसे अंकित मूल्य पर नहीं लिया; मैं वास्तव में यह समझने के लिए तैयार हूं कि इस तरह से कैसे काम किया जाता है।
एक बार जब मेरे पास वह सब हो गया, तो मैं बहु-किरायेदार रत्न के लिए तैयार था:
https://github.com/wireframe/multitenant
लेकिन मैं यहीं नहीं रुका। मल्टीटेनेंट मणि के लिए आवश्यक है कि आप Multitenant.with_tenant कहें जब भी आप चीजों को उचित रूप से स्कोप करना चाहते हैं, इसलिए मैंने एक TenantController बनाया जो इस तरह दिखता है:
around_filter :scope_current_tenant
def scope_current_tenant
begin
Firm.current = Firm.find_by_subdomain!(request.subdomain)
rescue
raise ActionController::RoutingError.new('Not Found')
end
Multitenant.with_tenant Firm.current do
yield
end
ensure
Firm.current = nil
end
end
और फिर किसी भी नियंत्रक को मैं एप्लिकेशन कंट्रोलर की बजाय किरायेदार नियंत्रक से किरायेदार विरासत से प्राप्त करना चाहता हूं। इस तरह मुझे नियंत्रक के विवरण में कुछ भी याद नहीं रखना पड़ा, यह 'बस काम किया'। डेवलपर्स को केवल यही सोचना था कि 'क्या यह एक नियंत्रक है जो टैनेंट डेटा को संभाल रहा है?'
हालांकि यह अभी भी कुछ चीजों को सही तरीके से करने वाले डेवलपर्स पर निर्भर करता है (मॉडल में 'acts_as_multitenant' कहते हुए, सही नियंत्रक से विरासत में मिला है, यह व्यवहार में वास्तव में अच्छी तरह से काम करता है।