2010-08-02 25 views
5

İçinde izin maskesi olan bir bit maskesi alanı olan bir kullanıcı tablo var. Yerel olarak, bir kullanıcının bir bit maskesi (UserPermissions&Perm)==Perm yaparak belirli bir izni olup olmadığını belirleyebilirim. Ancak, find_by_mask veya benzeri bir :conditions kullanarak, benzer bir sorun yayımlamak istiyorum, ancak eşleşen bir izin masasına sahip kullanıcıların listesini almak için veritabanını nasıl sorgulayabildiğimi öğrenemiyorum.ActiveRecord'da bit maskesi tarafından arama

ActiveRecord kullanarak herhangi bir fikir?

Özellikle bu sqlite ve postgres

cevap

12

yapmak akıl kârı kullanarak çalışmalıdır, bence, boolean alanların bir dizi haline bit maskesi alanını patlak olacaktır. Veritabanlarını ilişkisel bir veritabanında depolamak, bir alandaki sınırlandırılmış listelerin depolanmasından çok uzak değil - sınır çizgisi denormalizasyonu. sözü

, sen bir bit kullanmak VE & operatörü ile SQL sorguları, bu nedenle söyleyebiliriz edebilirsiniz:

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

Teşekkür bit düzeyinde bilgi için. Booleanları kullanmayı düşündüm ama 15 tane izin aldım ve daha sonra ekleyebilirim. Bir bit maskesi kullanmak, tabloda 15'ten fazla boole sahip olmaktan çok daha temizdir. –

İlgili konular