2012-11-20 7 views
11

मेरे पास "वोट" नामक एक पॉलिमॉर्फिक टेबल है, जहां उत्तर और प्रश्नों के वोट हैं।अद्वितीय "एसोसिएशन_टाइप" और "एसोसिएशन_आईडी" के साथ रेल में पॉलिमॉर्फिक टेबल को इंडेक्स करने के लिए कैसे करें

वोट

user_id  voteable_id voteable_type  value 

    1    2   Answer   1 
    2    2   Answer   1 

इस मामले में, आईडी = 2 के साथ जवाब दो वोट है।

सवाल यह है: इस तालिका को कैसे इंडेक्स करें?

पहले दृष्टिकोण:

add_index :votes, [:voteable_id, :voteable_type] 

इसका कारण यह है डुप्लीकेट कुंजी मान इच्छा अद्वितीय बाधा

दूसरा दृष्टिकोण का उल्लंघन करती है काम नहीं करेगा:

add_index :votes, :voteable_id, 
add_index :votes, :voteable_type 

यह एक मुझे लगता है कि होगा सी के कारण ज्यादा प्रदर्शन नहीं है आईडी के लिए प्रश्न पूछें और एक ही समय में टाइप करें।

तीसरा दृष्टिकोण:

add_index :votes, [:user_id, :voteable_id, :voteable_type] 

यह पिछले एक एक अच्छा है? क्या तीन स्तंभों को अनुक्रमित किया जाना चाहिए?

धन्यवाद

उत्तर

32

अपना पहला दृष्टिकोण जब तक आप :unique => true न जोड़ें के रूप में यह नहीं अद्वितीय हो जाएगा सही एक

add_index :votes, [:voteable_id, :voteable_type] 

है। और आपको इसे अद्वितीय नहीं बनाना चाहिए, क्योंकि इसके परिणामस्वरूप प्रति मतदान केवल एक ही वोट संभव होगा। टिप्पणियों में Tashos राज्यों के रूप में।

तीसरा दृष्टिकोण भी काम करेगा, और यहां आप unique बाधा का उपयोग कर सकते हैं, इसलिए प्रत्येक उपयोगकर्ता प्रति मतदान योग्य हो सकता है।

+0

धन्यवाद! मुझे नहीं पता कि यह मेरे पिछले माइग्रेशन में अद्वितीय क्यों बना रहा था। अब यह – Luccas

+0

काम करता है क्या पहले दृष्टिकोण और दूसरे दृष्टिकोण के बीच कोई अंतर है, या यह सिर्फ वाक्यविन्यास का मामला है? – kibaekr

+0

पहला दृष्टिकोण दो क्षेत्रों पर एक सूचकांक है, दूसरा दृष्टिकोण दो अलग-अलग सूचकांक है। – RebeccaD

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