2009-03-06 13 views
5

यहां मैं जो हासिल करने की कोशिश कर रहा हूं: मेरे पास एक उपयोगकर्ता तालिका है और प्रत्येक उपयोगकर्ता एक दर्जन प्रकार का हो सकता है: अभिनेता, नर्तक, निर्देशक, ... जो साइन अप करने के बाद निर्धारित किया जाता है। प्रत्येक प्रकार के उपयोगकर्ता के पास कई प्रोफाइल हो सकते हैं। उदाहरण के लिए। अभिनेताओं के पास अभिनेता_प्रोफाइल की संख्या हो सकती है, नर्तकियों की कैंडी में नर्तकियों की संख्या है, ...रेल पॉलीमोर्फिक एसोसिएशन पर रूबी

समस्या यह है कि मैं उपयोगकर्ता के साथ प्रोफ़ाइल को कैसे लिंक करूं। प्रत्येक प्रोफ़ाइल प्रकार के लिए एक अतिरिक्त तालिका बनाने का एक स्पष्ट समाधान होगा, ताकि मैं उपयोगकर्ता में एक polymorphic belong_to का उपयोग कर सकूं और फिर प्रत्येक प्रोफ़ाइल में एक साधारण belong_to का उपयोग कर सकूं, लेकिन यह इष्टतम से कम लगता है। तर्कसंगत तरीके से रेलवे को यह बताने का एक बेहतर तरीका होगा कि यह उपयोगकर्ता प्रकार का अभिनेता है, ताकि उपयोगकर्ता.प्रोफाइल बिना किसी अव्यवस्था के स्वाभाविक रूप से काम करे। क्या रेल ऐसे व्यवहार का समर्थन करते हैं, या क्या पूर्व विधि से बेहतर कुछ भी है? धन्यवाद।

उत्तर

1

उपवर्गों में रिश्तों को परिभाषित करें:

class User < ActiveRecord::Base 
end 

class Actor < User 
    has_many :profiles, :class_name => "ActorProfile" 
end 

class Dancer < User 
    has_many :profiles, :class_name => "DancerProfile" 
end 
3

PJB के जवाब सिंगल टेबल विरासत का उपयोग करता है। इसके लिए आपको काम करने के लिए अपने उपयोगकर्ता और अपने प्रोफाइल * टेबल पर कॉलम जोड़ने की आवश्यकता है, ताकि रेल यह जान सकें कि यह किस प्रकार का उपयोगकर्ता है (क्योंकि अभिनेता, डांसर इत्यादि उपयोगकर्ता के उप-वर्ग हैं)।

इसका मतलब है कि वे सभी उपयोगकर्ताओं/प्रोफाइल टेबल में सहेजे जाएंगे, लेकिन जब आप उन्हें तुरंत चालू करेंगे ActiveRecord उन्हें सही प्रकार के रूप में तुरंत चालू कर देगा। इस के साथ आप

Actor.find, Actor.all, etc 

तरह

User.find 

लेकिन यह भी कर बातें कॉल करने के लिए सक्षम हो जाएगा और इसे और अधिक विवरण और उदाहरण के लिए गूगल rails single table inheritance केवल अभिनेता

के दायरे वाला है। उपयोगकर्ता अंत

वर्ग ActorProfile:

    कोर्स आप अपने प्रोफाइल घोषित करने के लिए आवश्यकता होगी के
  • उसी तरह आप घोषित अपने प्रयोक्ता उपवर्गों

वर्ग प्रोफाइल < ActiveRecord :: बेस belongs_to उपवर्गों < प्रोफाइल अंत

कक्षा डांसरप्रोफाइल < प्रोफ़ाइल अंत

आदि

0

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

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