2010-08-02 14 views
5

में बिटमैस्क द्वारा खोजना मेरे पास एक बिटमैस्क फ़ील्ड वाला उपयोगकर्ता तालिका है जिसमें इसमें अनुमति मास्क है। स्थानीय रूप से, मैं यह निर्धारित कर सकता हूं कि उपयोगकर्ता को बिटमैस्क (UserPermissions&Perm)==Perm कर एक निश्चित अनुमति है या नहीं। हालांकि, मैं find_by_mask या कुछ ऐसा ही जारी कर सकता हूं, शायद :conditions का उपयोग करके, लेकिन मुझे लगता है कि मैं मेलिंग अनुमति मास्क वाले उपयोगकर्ताओं की सूची पुनर्प्राप्त करने के लिए डेटाबेस से कैसे क्वेरी कर सकता हूं।ActiveRecord

ActiveRecord का उपयोग कर कोई भी विचार?

विशेष रूप से इस SQLite और postgres

उत्तर

12

करने के लिए समझदार बात का उपयोग कर काम करना चाहिए, मेरी राय में, बूलियन क्षेत्रों की एक श्रृंखला में अपने bitmask क्षेत्र से बाहर तोड़ने के लिए किया जाएगा। एक रिलेशनल डेटाबेस में बिटमैस्क को स्टोर करना किसी क्षेत्र में सीमित सूचियों को संग्रहीत करने से बहुत दूर नहीं है - यह सीमा रेखा denormalization है। बिटवाइज़ जानकारी के लिए

User.where('permissions & ? > 0', Perm) 
+5

धन्यवाद:

जिसके अनुसार, यदि आप एक बिटवाइज़ उपयोग कर सकते हैं और & ऑपरेटर के साथ अपने एसक्यूएल प्रश्नों में है, तो आप कह सकते हैं। मैंने बुलियन का उपयोग करने के बारे में सोचा, लेकिन मेरे पास कुछ 15 अनुमतियां हैं, और बाद में और अधिक जोड़ सकती हैं। बिटमैस्क का उपयोग तालिका में 15+ बूलियन होने से कहीं अधिक स्वच्छ है। –