2012-11-20 19 views
11

"Oylar" adlı bir Polymorphic tablosum var.Eşsiz "association_type" ve "association_id" olmayan raylarda polimorfik tablo nasıl indekslenir?

Oy Bu durumda

user_id  voteable_id voteable_type  value 

    1    2   Answer   1 
    2    2   Answer   1 

, id = 2 ile cevap iki oy yukarı sahiptir.

Sorun şu soru: Bu tabloya nasıl?

İlk yaklaşım: yinelenen anahtar değeri irade benzersiz kısıtlama

İkinci yaklaşım ihlal ettiğinden

add_index :votes, [:voteable_id, :voteable_type] 

Bu çalışmaz:

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

I will tahmin Bu seferki c nedeniyle fazla performans yok Kimlik ve aynı anda tür için omposite sorguları.

Üçüncü yaklaşım:

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

bu sonuncusu iyi biri mi? Üç sütun çok endeksli mi?

Teşekkür

cevap

32

ilk yaklaşım sürece :unique => true o benzersiz edilmeyecektir olacak katmayan olarak doğru bir

add_index :votes, [:voteable_id, :voteable_type] 

olduğunu. Ve bunu benzersiz yapmamalısınız, çünkü bu, votab başına sadece bir oylama ile sonuçlanabilirdi. Yorumlar Tashos belirtiyor.

Üçüncü yaklaşım da işe yarayacak ve burada bir unique kısıtlaması kullanabilirsiniz, bu nedenle her kullanıcı yalnızca bir kez oynatabiliyor.

+0

Teşekkürler! Önceki geçişlerimde neden benzersiz bir şekilde üretildiğini bilmiyorum. şimdi çalıştı – Luccas

+0

İlk yaklaşım ve ikinci yaklaşım arasında bir fark var mı, yoksa sadece bir sözdizimi meselesi mi? – kibaekr

+0

İlk yaklaşım iki alandaki bir indekstir, ikinci yaklaşım iki ayrı indeksdir. – RebeccaD

İlgili konular